2015-10-26 66 views
0

目前我已经有了这条管道:设置PowerShell的变量,如果管道是空的

Get-R53HostedZones | where {$_.Name -eq 'myval'} | %{ Get-R53ResourceRecordSet -HostedZoneId $_.Id } | %{ $_.ResourceRecordSets | where {$_.Name.StartsWith("myval")} } 

这工作得很好,它给我我所期望的结果。我被困住的地方是我接下来需要做的事情......如果产生一个或多个结果,我需要设置一个变量为true,如果它为空,则需要设置false

+0

使用if语句:eg '$ x = if('123','abc'|?{$ _ -eq'xxx'}){$ true} else {$ false}'。如果流水线有可能产生一个会对if语句产生负面影响的“错误”结果,您可以这样做:'$ x = if(('123','abc'|?{$ _ -eq'xxx' } | measure-object).Count -gt 0){$ true} else {$ false}' – JohnLBevan

+0

你需要吗?你可以'结果= @(管道); foreach($ result中的$ r){...}'如果没有结果,循环将不会执行任何操作。 – TessellatingHeckler

回答

3

它分配给一个变量,并与if声明一下:

$MyRecords = @(Get-R53HostedZones | where {$_.Name -eq 'myval'} | %{ Get-R53ResourceRecordSet -HostedZoneId $_.Id } | %{ $_.ResourceRecordSets | where {$_.Name.StartsWith("myval")} }) 
if($MyRecords.Count -gt 0) { $true } else { $false } 

数组子表达式运算符(@())可确保数组返回,即使结果是只有一个项目。否则,Count属性不会存在无法在早期版本的PowerShell

你也可以这样做:

if ($MyRecords) { $true } else { $false } 

但第一种方法使得它更清楚你实际上测试,也将在情况下工作表达式可能返回值$false