Групповой объект AsHashTable не работает для ScriptProperty - PullRequest
3 голосов
/ 02 мая 2020

Работает:

$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

1 Ответ

1 голос
/ 03 мая 2020

Причина, по которой вы не можете получить доступ к значениям в таблице ha sh по имени пропа или по доступу на основе ключей, заключается в том, что ключи / реквизиты обернуты в объекты PSObject. Была проблема Github , чтобы исправить это в Powershell Core, но она, вероятно, навсегда останется в Windows Powershell.

Если вы хотите преобразовать в ха sh -table после группировки и хотите получить доступ к некоторым сгруппированным значениям по имени свойства или доступу на основе ключа, сделайте следующее:

$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'] 


Если вы хотите преобразовать в ha sh -таблицы после группировки и хотите получить доступ ко всем сгруппированным значениям одновременно, сделайте следующее:

$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


Если вы не конвертируете в ха sh -таблицы после группировки и хотите получить доступ к данным в $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...