2015-10-26 42 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