过滤powershell输出值

时间:2015-05-26 10:45:22

标签: powershell

PS C:\> Get-EC2Instance |%{ $_.RunningInstance } | Select-Object InstanceId,ImageID,@{Name='TagValues'; Expression={ ($_.Tags |%{ $_.Value }) }}

InstanceId         ImageId             TagValues
----------         -------             ---------
i-230151d5         ami-20224b10        Scott
i-8c80f27a         ami-e7527ed7        {landscape123, test123}
i-3d3195cb         ami-0b5f073b        temp

如何修改我的命令,只有" landscape *"过滤并显示?

InstanceId         ImageId             TagValues
----------         -------             ---------
i-8c80f27a         ami-e7527ed7        landscape123

1 个答案:

答案 0 :(得分:3)

在某些情况下,Tags属性看起来包含多个值。像这样更改您的计算属性以将其限制为单个值:

@{Name='TagValues'; Expression={$_.Tags | select -Expand Value | select -First 1}}

并添加过滤器以将结果限制为具有特定标记值的对象:

Get-EC2Instance |
  select -Expand RunningInstance |
  select InstanceId, ImageID,
         @{n='TagValues';e={$_.Tags | select -Expand Value | select -First 1}} |
  ? { $_.TagValues -eq 'landscape123' }

如果要为实例保留多个标记,请执行以下操作:

Get-EC2Instance |
  select -Expand RunningInstance |
  select InstanceId, ImageID,
         @{n='TagValues';e={$_.Tags | select -Expand Value}} |
  ? { @($_.TagValues) -contains 'landscape123' }

如果您需要对其中一个代码进行部分匹配,请执行以下操作:

Get-EC2Instance |
  select -Expand RunningInstance |
  select InstanceId, ImageID,
         @{n='TagValues';e={$_.Tags | select -Expand Value}} |
  ? { $_.TagValues | ? { $_ -like 'landscape*' } }