#Requires не видит модуль, Import-Module работает

Когда я запускаю простой скрипт с оператором #Requires -Version 4 -Modules TestModule в первой строке, я получаю сообщение об ошибке:

Сценарий «TestScript.ps1» не может быть запущен, так как отсутствуют следующие модули, указанные в операторах «#requires» сценария: TestModule CategoryInfo : ResourceUnavailable: (TestScript.ps1:String) [], ScriptRequiresException FullyQualifiedErrorId : ScriptRequiresMissingModules

Некоторые интересные факты:

  1. Второй раз запускаю этот скрипт (та же сессия), модуль загружается и все работает.
  2. Каталог Script находится на сетевом ресурсе, но 7 других модулей загружаются без проблем (типы модулей Manifest, Script и Binary - все они работают).
  3. Один из модулей также имеет оператор #Requires -Version 4 -Modules TestModule, но когда я запускаю скрипт с #Requires, указывающим на этот модуль, оба модуля загружаются без проблем.
  4. Путь явно добавлен к PSModulePath.
  5. Перед запуском скрипта Get-Module -ListAvailable перечисляет TestModule и все его команды.
  6. Import-Module работает с первого раза.
  7. Возможно, на машине чего-то не хватает: любой, кто входит в систему на этом компьютере, сталкивается с той же проблемой.

$PSVersionTable:

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18444
BuildVersion                   6.3.9600.16406

Я понятия не имею, что происходит.


person AdamL    schedule 11.08.2015    source источник
comment
вы загружаете модуль перед запуском скрипта?   -  person Luke    schedule 24.08.2015
comment
@ Люк № #Requires должен загрузить модуль. Но если я загружаю модуль до запуска скрипта, он работает нормально.   -  person AdamL    schedule 24.08.2015
comment
Так, согласно Microsoft, если необходимые модули отсутствуют в текущем сеансе, Windows PowerShell импортирует их. Если модули не могут быть импортированы, Windows PowerShell выдает завершающую ошибку. о чем, я думаю, вы спрашиваете? правильно, почему он не импортирует его автоматически.   -  person Luke    schedule 24.08.2015


Ответы (1)


Нашел причину. Я заменил #Requires на Import-Module TestModule -Verbose и обнаружил, что одна из сборок не может быть загружена, выдавая ошибку, но из-за $ErrorActionPreference=Continue загружается остальная часть модуля. Похоже, что #Requires ведет себя иначе, чем Import-Module.

person AdamL    schedule 10.08.2016