【问题标题】:#Requires doesn't see the module, Import-Module works#Requires 看不到模块,Import-Module 有效
【发布时间】:2015-08-11 15:29:53
【问题描述】:

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

脚本“TestScript.ps1”无法运行,因为以下原因 由脚本的“#requires”语句指定的模块 缺少:TestModule CategoryInfo : ResourceUnavailable: (TestScript.ps1:String) [], ScriptRequiresException FullyQualifiedErrorId : ScriptRequiresMissingModules

一些有趣的事实:

  1. 我第二次运行此脚本(同一会话)时,模块已加载,一切正常。
  2. 脚本目录位于网络共享上,但其他 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

我不知道发生了什么。

【问题讨论】:

  • 你是在运行脚本之前加载模块吗?
  • @Luke No. #Requires 应该加载模块。但是如果我在运行脚本之前加载模块,它就可以正常工作。
  • 所以根据微软的说法“如果所需的模块不在当前会话中,Windows PowerShell 会导入它们。如果无法导入模块,Windows PowerShell 会引发终止错误。”我认为您要问的是什么?正确,为什么不自动导入。

标签: powershell powershell-4.0 powershell-module


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多