我正在尝试从 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/