在PowerShell中,如何测试特定变量是否存在于全局范围内?

时间:2010-07-01 16:56:40

标签: powershell

我正在使用PowerShell脚本来实现WPF应用程序的UI自动化。通常,脚本基于全局变量的值作为一组运行。当我想运行一个脚本时,手动设置此变量有点不方便,因此我正在寻找一种方法来修改它们以检查此变量并在未找到时设置它。

test-path变量:\ foo似乎不起作用,因为我仍然收到以下错误:

  

无法检索变量'$ global:foo',因为它尚未设置。

9 个答案:

答案 0 :(得分:178)

Test-Path可以使用特殊语法:

Test-Path variable:global:foo

答案 1 :(得分:19)

编辑:请使用下面的stej答案。我自己(部分不正确)的一个仍然在这里复制以供参考:


您可以使用

Get-Variable foo -Scope Global

并捕获变量不存在时引发的错误。

答案 2 :(得分:10)

个人偏好是在Ignore使用SilentlyContinue,因为它根本不是错误。由于我们希望它可能$false,因此请阻止它(Ignore)(尽管是静默地)放在$Error堆栈中。

您可以使用:

if (Get-Variable 'foo' -Scope Global -ErrorAction 'Ignore') {
    $true
} else {
    $false
}

更简洁:

[bool](Get-Variable 'foo' -Scope 'Global' -EA 'Ig')

输出:

False

替代地

您可以捕获变量不存在时引发的错误。

try {
    Get-Variable foo -Scope Global -ErrorAction 'Stop'
} catch [System.Management.Automation.ItemNotFoundException] {
    Write-Warning $_
}

<强>输出:

WARNING: Cannot find a variable with the name 'foo'.

答案 3 :(得分:3)

简单: [boolean](get-variable&#34; Varname&#34; -ErrorAction SilentlyContinue)

答案 4 :(得分:2)

到目前为止,看起来有效的答案是this one

为了进一步突破,对我有用的是:

Get-Variable -Name foo -Scope Global -ea SilentlyContinue |出空

$?返回true或false。

答案 5 :(得分:1)

测试变量MyVariable的存在。 返回布尔值true或false。

use lib '/cgi-bin';

答案 6 :(得分:0)

您可以将变量分配给Get-Variable的返回值,然后检查它是否为null:

$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue

if ($variable -eq $null)
{
    Write-Host "foo does not exist"
}

# else...

请注意,必须将变量分配给某些东西才能使其“存在”。例如:

$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

答案 7 :(得分:0)

$myvar = if ($env:variable) { $env:variable } else { "default_value" } 

答案 8 :(得分:-6)

有一种更简单的方法:

if ($variable)
{
    Write-Host "bar exist"
}
else
{
    Write-Host "bar does not exists"
}