我正在尝试从 get-ec2instance 返回的对象中检索 instanceid、公共(public) dns 名称和“名称”标签。

$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 文档之间, I think Tag refers to this list ,但我不确定。我可以通过调用 $instances[0].Tag 访问打印键和值列的表,但我现在的问题是我希望 Value 成为我第一个表的输出,而不是 {Name} 对象。有什么建议么?

最佳答案

根据文档,Tag 属性是 Tag 对象的 列表 。所以一般来说,那里会存储多个键/值。您是否假设在您的情况下只有 1 个?
Select-Object 不仅可以获取原始属性值,还可以获取计算值。假设您只需要列表中 Value 对象中的 Tag 的逗号分隔列表。以下是您的操作方法:

$instances = Get-EC2Instance `
             |%{ $_.RunningInstance } `
             | Select-Object InstanceId,PublicDnsName,@{Name='TagValues'; Expression={($_.Tag |%{ $_.Value }) -join ','}}
$instances 的元素现在将有一个属性 TagValues,它是一个字符串,由与实例关联的所有标签的 Value 组成。

关于powershell - 如何在 Get-EC2Instance 的 RunningInstance 方法中访问列表值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18090022/

10-15 18:51