Импорт-модуль 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'
Любая идея о том, что может вызвать эту проблему?
Ответы
Ответ 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
Вместо [] укажите полный путь
Полное объяснение этого и что