2015-05-26 169 views
1
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 

如何修改我的命令,以便只過濾和顯示「風景*」?過濾器powershell輸出值

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

回答

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' } 

,做一些LIK:保持多個標籤的一個實例,做到這一點,而不是e:

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