powershell测试尚未分配的变量

时间:2012-02-07 18:09:39

标签: variables powershell if-statement conditional-statements

我想测试是否为变量分配了一个变量,如果没有执行操作。怎么能实现呢?

我尝试使用以下代码但收到错误:'-is'的右操作数必须是类型。

此时未分配

$ ProgramName。

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

5 个答案:

答案 0 :(得分:38)

任何未分配的变量的值都为null,而不是null的数据类型。所以,就这样做:

If ($ProgramName -ne $null)

...如果已将TRUE分配给非空值,则返回IF($ProgramName)

更容易检查

$null

哪个会检查IF(!$ProgramName) 是否为Test-Path variable:ProgramName,虽然逻辑是相反的,所以你可以使用

Test-Path variable:global:ProgramName

修改

Ruffin对评论中的严格模式提出了一个很好的观点。这种方法也可以使用:

例如,

$true$false,如果它是明确的全局作用域。这将返回{{1}}或{{1}},具体取决于变量是否存在。

答案 1 :(得分:9)

我想,

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

答案 2 :(得分:3)

要建立JNK和David的(正确)答案,请查看Jeffrey Snover撰写的这篇精彩博文,其中介绍了PoweShell中布尔表达式的所有用例。最后总结了如何测试变量的存在。

http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx

答案 3 :(得分:1)

与上述答案相反

Test-Path variable:ProgramName  

可能不是你想要的,因为它只测试变量的存在。如果Variable设置为$ null,它仍将返回$ true。

因此,在严格模式中,您可能需要测试它的存在性以及它是否为非空。

Set-StrictMode -version Latest
#TODO Add a scope parameter
Function IsEmpty([string]$varname){
   if (Test-path "variable:$varname"){ 
      $val=(gi "variable:$varname").value
      if ($val -is [bool]) {$false}
      else {$val -eq '' -or $val -eq $null} }
   else{ $true }
}

#TEST:
if (test-path variable:foobar){remove-variable foobar} ; IsEmpty foobar
$foobar=$null; IsEmpty foobar
$foobar='';  IsEmpty foobar;
$foobar=$false;  IsEmpty foobar

#Results:
True
True
True
False

严格模式可以带来一些脚本编写的乐趣...

答案 4 :(得分:0)

-isnot不是用于类型的事实,在Powershell 7中,有一个用于此目的的新运算符。仅当左侧为$ null时,才会进行分配。

$programname ??= 'foo'