gpt4 book ai didi

powershell - 如何将PowerShell脚本(而非功能)中的set-strictMode -version 2与param语句结合使用?

转载 作者:行者123 更新时间:2023-12-03 01:27:52 27 4
gpt4 key购买 nike

当我运行以下脚本时,得到一个“$ 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语句一起使用,而不会收到错误消息?

最佳答案

详细介绍Gert Jan Kraaijeveld's helpful answer:

param(...)块必须是脚本(或函数)中的第一个语句才能正常工作-以下受限异常(exception):

在v5 +中的

  • 中,using语句可能在它之前-请参见 about_using
  • 注释可能在它之前,
  • ,其中包含#Requires注释,声明了脚本运行之前已评估/确保的状态要求-请参见 about_Requires


  • 可以说,在解析时应将其他任何语句放置在param(...)之前,但是从PowerShell 7.0开始,该错误会在运行时发生,这可能导致无用的错误消息:

    从技术上讲,发生的情况是错误地将命令放置在 param(...)块之前,从而将后者的解释更改为考虑 param的命令名称(别名,函数,脚本或可执行文件)-通常不存在。

    因为在您的情况下,放错了位置的命令恰好是 Set-StrictMode调用,所以不会先评估该命令的参数,然后再引用不存在的 $windowHeight(然后将其视为参数变量)导致您看到的严格模式错误。

    如果您首先放置了另一个命令,那么对 param作为命令名称的误解将会变得更加明显:

    The term 'param' is not recognized as the name of a cmdlet, function, script file, or operable program. [...]



    如上所述,虽然这比误导性的严格模式错误更好,但具有专用,特定错误消息的解析时错误会更好。

    关于powershell - 如何将PowerShell脚本(而非功能)中的set-strictMode -version 2与param语句结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692362/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com