我有一系列对象:
$list = @( `
@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
)
我想使用guid查找并返回标题。我想要的只是价值,我不想归还一个对象。例如,如果查阅guid' 2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'我只想返回一个字符串值' Second'而不是一个具有值为' Second'的属性的对象。
我该怎么做?
我尝试过以下方法:
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'
返回哈希表
和
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select {$_.title}
返回带有{$_.title}
NoteProperty的PSObject。
以下两项尝试有效:
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select {$_.title}).{$_.title}
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select @{Name="result";Expression={$_.title}}).result
但是,它们都很难看。有没有更好的方法只返回价值?
答案 0 :(得分:5)
另一个选项
($list |?{ $_.guid -eq '0EDC361C-862E-41FC-8A60-870CADC17EC5'}).title
答案 1 :(得分:4)
如果您可以轻松地更改数据结构,那么散列哈希可能是最有效和最优雅的解决方案:
$hashtable = @{}
$hashtable.Add('0118B390-3AF5-406E-920D-FE140392584D', @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'})
$hashtable.Add('2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188', @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'})
$hashtable.Add('0EDC361C-862E-41FC-8A60-870CADC17EC5', @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'})
然后您可以通过这种方式从guid中检索您的标题:
$hashtable['2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'].title
答案 2 :(得分:2)
如果您只想要单个属性的值,最简单的方法是将$list
定义为自定义对象数组并展开该属性:
$list = @(
[pscustomobject]@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'},
[pscustomobject]@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'},
[pscustomobject]@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'}
)
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select -Expand title
但这需要PowerShell v3或更新版本。如果您遇到PowerShell v2或更早版本,或者由于某种原因无法将哈希表转换为自定义对象,您可以在循环中回显title
属性(类似于{ {3}}建议):
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | % { $_.title }
答案 3 :(得分:1)
这是访问Value的另一种方法。
PS:> $list = @( `
>> @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
>> @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
>> @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
>> )
>>
PS:> $list|%{if($_.ContainsValue('0EDC361C-862E-41FC-8A60-870CADC17EC5')){$_.title}}
Third
PS:>