我如何在PowerShell脚本(非函数)中将set-strictMode -version 2与param语句组合?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在PowerShell脚本(非函数)中将set-strictMode -version 2与param语句组合?相关的知识,希望对你有一定的参考价值。

运行以下脚本时,我得到一个由于未设置变量'$ windowHeight',因此无法检索。错误消息。

set-strictMode -version 2

param (
  [parameter(Mandatory=$false)] [Int32] $windowHeight,
  [parameter(Mandatory=$false)] [Int32] $windowWidth
)

echo "windowHeight: $windowHeight"
echo "windowWidth:  $windowWidth"

如果删除set-strictMode语句,此错误消息就会消失。

是否可以以某种方式将set-strictMode -version 2param语句一起使用,而不会收到错误消息?

答案

param语句应该放在第一位。因此,将Set-StrictMode行向下移动几行。然后就可以了。如果希望始终提供参数,则将其设为必需参数

另一答案

详细说明Gert Jan Kraaijeveld's helpful answer

[param(...)必须是脚本(或函数)中的first语句,以便工作-具有以下有限例外

  • 在v5 +中,using语句可能在它之前-参见about_using

  • comments可能在它之前,

    • 其中包含about_using注释,在脚本运行之前陈述/评估了要求,并确保了这些要求-请参见#Requires

[可以说,应将其他任何语句放置在about_Requires之前在解析时] >>,但是从PowerShell 7.0开始,错误发生在[[运行时,这可能会导致无用的错误消息:从技术上讲,发生的是错误地将命令放置在[[0]之前

about_Requires块中,从而改变了后者的解释,以考虑param(...)

command的名称(别名,函数,脚本或可执行文件) -通常不存在。因为在您的情况下,放错了位置的命令恰好是param(...)调用,所以未首先评估该命令的arguments

,并引用了一个不存在的param(然后没有被视为

parameter变量)导致您看到的严格模式错误。如果您先放置了另一个命令,则将Set-StrictMode误解为命令名

会变得更加明显:

$windowHeight

虽然这比误导性的严格模式错误更好,如上所述,但是带有错误信息[[专用,特定

解析时间错误会更好。

以上是关于我如何在PowerShell脚本(非函数)中将set-strictMode -version 2与param语句组合?的主要内容,如果未能解决你的问题,请参考以下文章

仅在非交互式运行时如何从 Powershell 脚本返回退出代码

如何使用PowerShell多线程并使用Pester Mocks进行单元测试

如何更改 Azure 函数中的 PowerShell 文化

python在powershell中运行脚本给出'非utf'错误[重复]

PowerShell:如何在 PowerShell 中将数组对象转换为字符串?

如何在不同的运行空间中运行函数,PowerShell