Модуль импорта Powershell не находит модули - PullRequest
46 голосов
/ 20 июня 2011

Я изучаю 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'

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

Ответы [ 8 ]

87 голосов
/ 20 июня 2011

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

$home/WindowsPowerShell/Modules/XMLHelpers/

Полный путь будет:

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

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

import-module XMLHelpers
9 голосов
/ 07 мая 2016

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

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

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

Import-Module (Resolve-Path('XMLHelpers.psm1'))
9 голосов
/ 25 августа 2014

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

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

4 голосов
/ 08 октября 2014

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

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

Import-Module $ScriptPath\Modules\Builder.psm1

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

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

1 голос
/ 19 октября 2017

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

1 голос
/ 16 июня 2017

Мой вывод с 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 (без трейлинга \), но сейчас это не работает. Чтобы загрузить его, я должен Import-Module C:\MyModules\ExampleModule

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

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

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

1 голос
/ 13 мая 2016

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

0 голосов
/ 03 октября 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...