#Requires 看不到模块,Import-Module 有效

#Requires doesn't see the module, Import-Module works

当我 运行 一个在第一行带有 #Requires -Version 4 -Modules TestModule 语句的简单脚本时,我得到一个错误:

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

我不知道发生了什么。

找到原因了。 我将 #Requires 替换为 Import-Module TestModule -Verbose 并发现其中一个程序集无法加载,生成错误,但由于 $ErrorActionPreference=Continue 模块的其余部分已加载。 #Requires 的行为似乎与 Import-Module 不同。