我如何在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 2
与param
语句一起使用,而不会收到错误消息?
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进行单元测试
python在powershell中运行脚本给出'非utf'错误[重复]