2015-05-26 2 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' } 

Если вам нужно частичное совпадение по одному из тегов, сделать что-то Лик e это:

Get-EC2Instance | 
    select -Expand RunningInstance | 
    select InstanceId, ImageID, 
     @{n='TagValues';e={$_.Tags | select -Expand Value}} | 
    ? { $_.TagValues | ? { $_ -like 'landscape*' } } 
Смежные вопросы