如何访问Get-EC2Instance的RunningInstance方法中的列表值?

Ant*_*ace 4 powershell amazon-ec2 amazon-web-services aws-powershell

我正在尝试从返回的对象中检索instanceid,公共DNS名称和"Name"标记get-ec2instance.

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

这是输出:

InstanceId                              PublicDnsName                     Tag
----------                              -------------                     ---
myInstanceIdHere                        myPublicDnsName                   {Name}
...                                     ...                               {Name}
Run Code Online (Sandbox Code Playgroud)

我希望能够{Name}使用上面的代码行访问并在此输出中打印其值.自最初发布以来,我做了一些研究,发现......

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

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     List`1                                   System.Object
Run Code Online (Sandbox Code Playgroud)

在这个和AWS文档之间,我认为Tag引用了这个列表,但我不确定.我可以访问一个通过调用打印键和值列的表$instances[0].Tag,但我现在的问题是我希望它Value是我的第一个表而不是{Name}对象的输出.有什么建议?

lat*_*kin 5

每文档,该Tag属性是一个列表Tag对象.因此,通常,存储多个键/值.你假设你的情况只有1吗?

Select-Object您不仅可以获取原始属性值,还可以获取计算值.比方说,你只是想在一个逗号分隔的列表Value从S Tag列表中的对象.这是你如何做到的:

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

现在,元素$instances将具有一个属性TagValues,该属性是由Value与实例关联的所有标记组成的字符串.