我正在使用PowerShell脚本来实现WPF应用程序的UI自动化.通常,脚本基于全局变量的值作为一组运行.当我想只运行一个脚本时,手动设置此变量有点不方便,所以我正在寻找一种方法来修改它们以检查此变量并在未找到时设置它.
test-path变量:\ foo似乎不起作用,因为我仍然收到以下错误:
无法检索变量'$ global:foo',因为它尚未设置.
ste*_*tej 194
Test-Path 可以使用特殊语法:
Test-Path variable:global:foo
Run Code Online (Sandbox Code Playgroud)
Joe*_*oey 24
编辑:使用下面的stej的答案.我自己(部分不正确)的一个仍然在这里复制以供参考:
您可以使用
Get-Variable foo -Scope Global
Run Code Online (Sandbox Code Playgroud)
并捕获变量不存在时引发的错误.
Ver*_*Ray 13
个人喜好是Ignore在SilentlyContinue这里使用,因为它根本不是错误.因为我们期望它可能会$false阻止它(有Ignore)被放入$Error堆栈中(尽管是静默的).
您可以使用:
if (Get-Variable 'foo' -Scope Global -ErrorAction 'Ignore') {
$true
} else {
$false
}
Run Code Online (Sandbox Code Playgroud)
更简洁:
[bool](Get-Variable 'foo' -Scope 'Global' -EA 'Ig')
Run Code Online (Sandbox Code Playgroud)
输出任一:
False
Run Code Online (Sandbox Code Playgroud)
您可以捕获变量不存在时引发的错误.
try {
Get-Variable foo -Scope Global -ErrorAction 'Stop'
} catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $_
}
Run Code Online (Sandbox Code Playgroud)
输出:
WARNING: Cannot find a variable with the name 'foo'.
Run Code Online (Sandbox Code Playgroud)
小智 7
简单的:
[boolean](get-variable "Varname" -ErrorAction SilentlyContinue)
Run Code Online (Sandbox Code Playgroud)