管道到 powershell 中的 if 语句的解决方法?

Workaround for piping to an if-statement in powershell?

我想将对象通过管道传递给 PowerShell if 语句,但它不起作用:

for($i = 1; $i -le 70; $i++) {
    Get-AzureRmRedisCache -Name "isi$i" -ResourceGroupName "iaas101" | if ($_.ProvisioningState -eq 'Succeeded') {
    Remove-AzureRmRedisCache $_ -Force
}}

"The term 'if' is not recognized as the name of a cmdlet, function, script file, or operable program"。那么我应该怎么做呢?

你需要做这样的事情:

Get-AzureRmRedisCache -Name "isi$i" -ResourceGroupName "iaas101" | where { $_.ProvisioningState -eq 'Succeeded' } | 
    Remove-AzureRmRedisCache -Force

您使用 Where-Object 过滤。

或者你可以这样做:

$cache = Get-AzureRmRedisCache -Name "isi$i" -ResourceGroupName "iaas101"
if ( $cache.ProvisioningState -eq 'Succeeded' ) { do stuff }

或这个(丑陋):

if ( (Get-AzureRmRedisCache -Name "isi$i" -ResourceGroupName "iaas101").ProvisioningState -eq 'Succeeded' ) { do stuff }