在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" }