当我运行以下脚本时,得到一个“$ 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 2
与param
语句一起使用,而不会收到错误消息? 最佳答案
详细介绍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/