在PowerShell中,如何testing全局范围内是否存在特定的variables?
我正在使用WPF应用程序的一些UI自动化的PowerShell脚本。 通常情况下,脚本是基于全局variables的值作为一个组来运行的。 当我只想运行一个脚本的时候手动设置这个variables有点不方便,所以我正在寻找一种方法来修改它们来检查这个variables,如果没有find,就设置它。
testingpathvariables:\ foo似乎不工作,因为我仍然得到以下错误:
variables'$ global:foo'不能被检索,因为它没有被设置。
编辑:使用stej的答案下面。 我自己的(部分不正确)仍然在这里转载以供参考:
您可以使用
Get-Variable foo -Scope Global
并捕获variables不存在时引发的错误。
Test-Path
可以使用一个特殊的语法:
Test-Path variable:global:foo
您可以使用:
if (Get-Variable foo -Scope Global -ErrorAction SilentlyContinue) { $true } else { $false }
输出:
False
另外
您可以捕获variables不存在时引发的错误。
try { Get-Variable foo -Scope Global -ErrorAction Stop } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $_ }
输出:
WARNING: Cannot find a variable with the name 'foo'.
到目前为止,看起来这个作品的答案是这样的 。
要进一步分解,对我而言是这样的:
获取variables-Name foo – 全球范围 – 无声地继续| 出空
$? 返回true或false。
简单:[boolean](get-variable“Varname”-ErrorAction SilentlyContinue)
您可以将variables分配给Get-Variable的返回值,然后检查它是否为空:
$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "foo does not exist" } # else...
请注意,variables必须分配给某个“存在”的东西。 例如:
$global:foo = $null $variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "foo does not exist" } else { Write-Host "foo exists" } $global:bar $variable = Get-Variable -Name bar -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "bar does not exist" } else { Write-Host "bar exists" }
输出:
foo exists bar does not exist
还有一个更简单的方法:
if ($variable) { Write-Host "bar exist" } else { Write-Host "bar does not exists" }