2012-02-07 26 views
13

我想测试一下,看一个变量是否已经分配了一个变量,如果不执行操作。这怎么能实现?powershell测试一个尚未分配的变量

我试图用下面的代码,但收到错误:“-is”的右操作数必须是一个类型。

$ ProgramName在此处未分配。

If ($ProgramName -isnot $null) { 
    $ProgramName = $ProgramName + ', ' + $cncPrograms 
} 
Else { 
    If ($cncPrograms -isnot $null) { 
    $ProgramName = $cncPrograms 
    } 
} 

回答

31

任何未分配的变量的值都是null,而不是数据类型为null。所以,只要做到这一点:

If ($ProgramName -ne $null) 

...这将返回TRUE如果它被分配到一个非空值。

一个更简单的检查,以是

IF($ProgramName) 

这将检查是否是$null与否,尽管逻辑是相反的,所以你可以使用

IF(!$ProgramName) 

编辑:

Ruffin在评论中提出了一个关于strictmode的好方法。例如,此方法也可以使用:

Test-Path variable:ProgramNameTest-Path variable:global:ProgramName如果它明确指定了全局作用域。这将返回$true$false,具体取决于变量是否存在。

+0

谢谢。在阅读Andy Arismendi发布的文章后,我发现你的解释更有用。现在它总是有意义的!感谢发布。 – resolver101 2012-02-07 21:55:48

+2

我不认为*与'Set-StrictMode -version latest;'一起使用,对吗?严格模式开启时应该如何检查它? **编辑**显然['测试路径变量:全局:foo '](http://stackoverflow.com/a/3163008/1028230) – ruffin 2014-12-18 15:11:55

+3

@ruffin'测试路径变量:ProgramName'将返回'$ true '或'$ false'。很好的抓住严格的模式。我补充说,答案。 – JNK 2014-12-18 15:17:06

7

Test-Path variable:\var应该做你想做的,我想。

+0

是的。也起作用。很多方法来检查。这不是一个好方法吗?只是因为你用“我猜”来完成你的句子而提问。 – resolver101 2012-02-07 21:58:47

+2

这确实是正确的答案。另一种做法是技术上的破解。这是实现它的预期编程方式。 – ZaxLofful 2016-03-17 17:00:09