3

作品:

$Names = 1..5 | % { new-object psobject | add-member -Type NoteProperty -Name Name -Value "MyName" -PassThru } | group Name -AsHashTable
$Names.MyName

不起作用:

$Names = 1..5 | % { new-object psobject | add-member -Type ScriptProperty -Name Name -Value {"MyName"} -PassThru } | group Name -AsHashTable
$Names.MyName
4

1 回答 1

1

您无法通过道具名称或基于键的访问来访问哈希表中的值的原因是键/道具包装在 PSObjects 中。有一个Github 问题可以在 Powershell Core 中解决此问题,但它可能会永远保留在 Windows Powershell 中。

如果您想在分组后转换为哈希表,并希望通过属性名称或基于键的访问来访问某些分组值,请执行以下操作:

$Names = 1..5 | ForEach-Object { 
    New-Object PsObject | Add-Member -Type ScriptProperty -Name Name -Value { return "MyName"} -PassThru 
} | Group-Object -Property 'Name' -AsHashTable -AsString
$Names.MyName 
$Names['MyName'] 


如果要在分组后转换为哈希表,并希望一次访问所有分组值,请执行以下操作:

$Names = 1..5 | ForEach-Object { 
    New-Object PsObject | Add-Member -Type ScriptProperty -Name Name -Value { return "MyName"} -PassThru 
} | Group-Object -Property 'Name' -AsHashTable
$Names.Values


如果您在分组后没有转换为哈希表,并且想要访问 中的数据$Names.Group,则需要扩展该属性。

$Names = 1..5 | % { 
    new-object psobject | add-member -Type ScriptProperty -Name Name -Value {"MyName"} -PassThru 
} | Group-Object -Property 'Name' 
$Names | Select-Object -ExpandProperty Group
于 2020-05-02T21:05:25.070 回答