Как получить доступ к значению списка в методе RunningInstance Get-EC2Instance?

Я пытаюсь получить идентификатор экземпляра, общедоступное имя DNS и тег «Имя» из объекта, возвращаемого get-ec2instance.

$instances = foreach($i in (get-ec2instance)) '
{ $i.RunningInstance | Select-Object InstanceId, PublicDnsName, Tag }

Вот результат:

InstanceId                              PublicDnsName                     Tag
----------                              -------------                     ---
myInstanceIdHere                        myPublicDnsName                   {Name}
...                                     ...                               {Name}

Я хотел бы получить доступ к {Name}, используя приведенную выше строку кода, и распечатать его значение в этом выводе. Я провел небольшое исследование с момента этой первоначальной публикации и нашел...

PS C:\Users\aneace\Documents> $instances[0].Tag.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     List`1                                   System.Object

Между этим и документами AWS я думаю, что тег ссылается на этот список, но я не уверен. Я могу получить доступ к таблице, которая печатает столбцы ключа и значения, вызвав $instances[0].Tag, но теперь моя проблема заключается в том, что я хотел бы, чтобы Value был выводом для моей первой таблицы вместо объекта {Name}. Какие-либо предложения?


person Anthony Neace    schedule 06.08.2013    source источник


Ответы (2)


Согласно документации, свойство Tag представляет собой список объектов Tag. Таким образом, в общем случае там будет храниться несколько ключей/значений. Вы предполагаете, что в вашем случае есть только 1?

Select-Object позволяет получать не только необработанные значения свойств, но и расчетные значения. Допустим, вам просто нужен список разделенных запятыми Value объектов из Tag объектов в списке. Вот как вы это сделаете:

$instances = Get-EC2Instance `
             |%{ $_.RunningInstance } `
             | Select-Object InstanceId,PublicDnsName,@{Name='TagValues'; Expression={($_.Tag |%{ $_.Value }) -join ','}}

Элементы $instances теперь будут иметь свойство TagValues, представляющее собой строку, состоящую из Value всех тегов, связанных с экземпляром.

person latkin    schedule 07.08.2013
comment
Действительно полезно - я немного изменил его, чтобы сообщить ключ тега, а также значение: get-ec2instance | %{$_.Instances} | select @{Name='TagValues'; Expression={($_.Tag | %{$_.Key + '=' + $_.Value}) -join ', '}} - person Francis Norton; 16.07.2015

Вот как извлечь теги в плоский объект вместе с другими свойствами

$region = 'us-west-2'
$instances = (Get-Ec2Instance -Region $region).Instances | select `
    @{Name="ServerName";Expression={$_.tags | where key -eq "Name" | select Value -expand Value}},`
    InstanceType ,`
    InstanceId,`
    ImageId,`
    @{Name="Role";Expression={$_.tags | where key -eq "Role" | select Value -expand Value}},`
    @{Name="Group";Expression={$_.tags | where key -eq "Group" | select Value -expand Value}},`
    @{Name="Subsystem";Expression={$_.tags | where key -eq "subsystem" | select Value -expand Value}},`
    @{Name="State";Expression={$_.State.Name}},`
    @{Name="Region";Expression={$region}}

$instances | Sort-Object -Property State, ServerName | Format-Table
person fiat    schedule 22.06.2020