Подтвердить что ты не робот

Импорт-модуль Powershell не находит модули

Я изучаю PowerShell, и я пытаюсь создать свою собственную библиотеку модулей.

Я написал простой модуль XMLHelpers.psm1 и поместил в свою папку $home/WindowsPowerShell/Modules.

Когда я это сделаю:

 import-module full_path_to_XMLHelpers.psm1

Это работает. Но когда я это делаю:

import-module XMLHelpers

Это не работает, и я получаю сообщение об ошибке:

Import-Module: указанный модуль "xmlhelpers" не был загружен, потому что в любом каталоге модуля не было найдено допустимого файла модуля.

Я проверил, что переменная окружения PSModulePath содержит эту папку. Поскольку это сетевая папка, я также попытался переместить ее в локальную папку и изменить PSModulePath, но без успеха

 $env:PSModulePath=$env:PSModulePath+";"+'C:\local'

Любая идея о том, что может вызвать эту проблему?

4b9b3361

Ответ 1

Модуль должен быть помещен в папку с тем же именем, что и модуль. В вашем случае:

$home/WindowsPowerShell/Modules/XMLHelpers/

Полный путь:

$home/WindowsPowerShell/Modules/XMLHelpers/XMLHelpers.psm1

Тогда вы сможете:

import-module XMLHelpers

Ответ 2

Я думаю, что Import-Module пытается найти модуль в каталоге по умолчанию C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

Попробуйте установить полный путь или скопируйте его в C:\Windows\System32\WindowsPowerShell\v1.0\Modules

Ответ 3

1.Это будет искать XMLHelpers/XMLHelpers.psm1 в текущей папке

Import-Module (Resolve-Path('XMLHelpers'))

2.Это будет искать XMLHelpers.psm1 в текущей папке

Import-Module (Resolve-Path('XMLHelpers.psm1'))

Ответ 4

Я испытал ту же ошибку и пробовал множество вещей, прежде чем я преуспел. Решение заключалось в том, чтобы добавить путь к script в относительный путь модуля следующим образом:

// Note that .Path will only be available during script-execution
$ScriptPath = Split-Path $MyInvocation.MyCommand.Path

Import-Module $ScriptPath\Modules\Builder.psm1

Btw вы должны взглянуть на http://msdn.microsoft.com/en-us/library/dd878284(v=vs.85).aspx, который гласит:

Начиная с Windows PowerShell 3.0, модули автоматически импортируются, когда в команде используется какой-либо командлет или функция в модуле. Эта функция работает на любом модуле в каталоге, который включен в значение переменной среды PSModulePath ($ env: PSModulePath)

Ответ 5

Некоторые плагины требуют, чтобы один из них выполнялся как Administrator и не загружался, если у них не было этих учетных данных, активных в оболочке.

Ответ 6

У меня была эта проблема, но только в Visual Studio Code, а не в ISE. Оказывается, я использовал сеанс x86 в VSCode. Я отобразил меню сеанса PowerShell и переключился на сеанс x64, и все модули начали работать без полных путей. Я использую Версию 1.17.2, архитектуру x64 VSCode. Мои модули были сохранены в каталоге C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

Ответ 7

Мое обнаружение с PS 5.0 в Windows 7: $ENV:PsModulePath должно заканчиваться на. Это обычно означает, что он загрузит все модули в этом пути.

Я не могу добавить один модуль в $env: PsModulePath и загрузить его с помощью Import-Module ExampleModule. Я должен использовать полный путь к модулю. например C:\MyModules\ExampleModule. Я уверен, что он работал.

Например: Скажем, у меня есть модули:

C:\MyModules\ExampleModule
C:\MyModules\FishingModule

Мне нужно добавить C:\MyModules\ в $ENV:PsModulePath, что позволит мне делать

Import-Module ExampleModule
Import-Module FishingModule

Если по какой-то причине я не хотел FishingModule, я думал, что могу добавить только C:\MyModules\ExampleModule (no trailing \), но теперь это не работает. Чтобы загрузить его, я должен Import-Module C:\MyModules\ExampleModule

Интересно, что в обоих случаях выполнение Get-Module -ListAvailable показывает модули, но оно не будет импортироваться. Хотя, cmdlets модуля, похоже, все равно работает.

AFAIK, чтобы заставить автоматический импорт работать, нужно добавить имя функции в FunctionToExport в файл манифеста (.psd1). Добавление FunctionsToExport = '*' приводит к разрыву автоматической загрузки. У вас все еще есть Export-ModuleMember -Function * в файле модуля (.psm1).

Это мои выводы. Были ли изменения или мой компьютер сломан, еще предстоит выяснить. НТН

Ответ 8

попробуйте ниже на powershell:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
import-module [\path\]XMLHelpers.psm1

Вместо [] укажите полный путь

Полное объяснение этого и что