我想测试是否为变量分配了一个变量,如果没有执行操作。怎么能实现呢?
我尝试使用以下代码但收到错误:'-is'的右操作数必须是类型。
此时未分配$ ProgramName。
If ($ProgramName -isnot $null) {
$ProgramName = $ProgramName + ', ' + $cncPrograms
}
Else {
If ($cncPrograms -isnot $null) {
$ProgramName = $cncPrograms
}
}
答案 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'