2015-08-11 3 views
0

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

The script 'TestScript.ps1' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: TestModule CategoryInfo : ResourceUnavailable: (TestScript.ps1:String) [], ScriptRequiresException FullyQualifiedErrorId : ScriptRequiresMissingModules

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

  1. Во второй раз, когда я запускаю этот скрипт (тот же сеанс), модуль загружается и все работает.
  2. Каталог сценариев находится в общем сетевом ресурсе, но 7 других модулей загружаются без каких-либо проблем (типы модулей - манифест, скрипт и двоичный файл - все они работают).
  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 

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

+0

Вы загружаете модуль перед запуском сценария? – Luke

+0

@ Luke No. '# Requires' должен загрузить модуль. Но если я загружаю модуль, прежде чем запускать скрипт, он отлично работает. –

+0

Итак, согласно Microsoft «Если требуемые модули не находятся в текущем сеансе, Windows PowerShell импортирует их. Если модули не могут быть импортированы, Windows PowerShell выдает завершающую ошибку». о чем я думаю, о чем вы спрашиваете? правильно, почему он не импортирует его автоматически. – Luke

ответ

0

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

Смежные вопросы