Powershell 如果无法看到模块,导入模块将正常工作

Powershell 如果无法看到模块,导入模块将正常工作,powershell,powershell-4.0,powershell-module,Powershell,Powershell 4.0,Powershell Module,当我在第一行使用Requires-Version 4-Modules TestModule语句运行一个简单脚本时,我得到一个错误: 无法运行脚本“TestScript.ps1”,因为出现以下错误 由脚本的requires语句指定的模块 缺少:TestModule CategoryInfo:ResourceUnavailable:TestScript.ps1:String[],ScriptRequiresException FullyQualifiedErrorId: ScriptRequires

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

无法运行脚本“TestScript.ps1”,因为出现以下错误 由脚本的requires语句指定的模块 缺少:TestModule CategoryInfo:ResourceUnavailable:TestScript.ps1:String[],ScriptRequiresException FullyQualifiedErrorId: ScriptRequiresMissingModule

一些有趣的事实:

第二次我在同一个会话中运行这个脚本时,模块被加载,一切正常。 脚本目录位于网络共享上,但加载其他7个模块时没有任何问题模块类型为Manifest、Script和Binary-它们都是worlk。 其中一个模块也有Requires-Version 4-modules TestModule语句,但是当我运行一个带有Requires指向该模块的脚本时,两个模块的加载都没有任何问题。 路径显然已添加到PSModulePath。 在运行脚本之前,Get Module-ListAvailable会列出TestModule及其所有命令。 导入模块第一次工作。 计算机上可能缺少某些内容:任何登录到该计算机的人都遇到了相同的问题。 $PSVersionTable:

我不知道发生了什么事。

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

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

在运行脚本之前是否加载模块?@Luke No.Requires应该加载模块。但是如果我在运行脚本之前加载模块,它可以正常工作。因此,根据Microsoft的说法,如果所需模块不在当前会话中,Windows PowerShell将导入它们。如果无法导入模块,Windows PowerShell将抛出终止错误。我想你是在问什么?正确,为什么不自动导入。在运行脚本之前是否加载模块?@Luke No.Requires应该加载模块。但是如果我在运行脚本之前加载模块,它可以正常工作。因此,根据Microsoft的说法,如果所需模块不在当前会话中,Windows PowerShell将导入它们。如果无法导入模块,Windows PowerShell将抛出终止错误。我想你是在问什么?正确,为什么不自动导入呢。
Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18444
BuildVersion                   6.3.9600.16406