当我运行以下脚本时,得到一个“$ 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作为命令名称的误解将会变得更加明显:



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

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

    10-16 02:42