在Powershell中管道传输到if语句的解决方法?

时间:2018-09-28 19:48:22

标签: powershell if-statement pipeline azure-powershell

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

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

“术语'if'不被识别为cmdlet,函数,脚本文件或可运行程序的名称”。那我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

您需要执行以下操作:

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 }