Назад | Перейти на главную страницу

Windows PowerShell не может найти модули

Я новичок в PowerShell и давно не администрировал Windows. Я загрузил zip-архив модуля Windows Update PowerShell (http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc) и вставьте C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WindowsUpdate. PowerShell не находит эти модули.

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

Ваш вопрос указывает на то, что вы извлекли:

C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ WindowsUpdate

Это неправильный каталог. Модуль называется PSWindowsUpdate, и поэтому он должен находиться в каталоге с именем PSWindowsUpdate. Я распаковал почтовый индекс в:

C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ PSWindowsUpdate

Следующее импортирует модуль и работает должным образом:

Import-Module PSWindowsUpdate

Как и в видео, которое я разместил в комментарии к вашему исходному вопросу, вы не должны размещать свои модули в том же месте, где Microsoft размещает свои модули. (т.е. C:\Windows\System32\WindowsPowershell\v1.0\Modules)

Итак, где вы должны разместить свои собственные модули Powershell? Ответ прост. Вы помещаете свои модули в один из каталогов, указанных в переменной среды PSModulesPath, что не System32\WindowsPowershell\v1.0\Modules.

PS C:\Users\ryan> $Env:PSModulePath -split ';'
C:\Users\ryan\Documents\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\

Теперь я знаю, что вы видите там только каталог для конкретного пользователя. Но вы можете добавить любой путь к этой переменной среды. И вы можете сделать это в масштабах всей машины, чтобы затронуть всех пользователей. Вы можете сделать это в графическом интерфейсе, перейдя в Advanced System Properties, или вы можете сделать это в командной строке, используя setx. В set команда годна только для текущего сеанса, setx установит постоянную общесистемную переменную.

Вы также можете попробовать вставить модуль PS в

C:\Users\All Users\Documents\WindowsPowershell\Modules

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

Изменить: наконец, не забудьте создать подкаталог для вашего модуля, поэтому, если ваш модуль называется Foo, вам нужно создать подкаталог Foo в одном из этих PSModulePaths.

Приятного вам путешествия по Powershell! :)