W jaki sposób przekształcić kolekcję obiektów zwracanych z wbudowanych cmdletów (np. Get-Process czy Get-Service) w kolekcję typu Hashtable?
W jaki sposób przekształcić kolekcję obiektów zwracanych z wbudowanych cmdletów (np. Get-Process czy Get-Service) w kolekcję typu Hashtable?
Budując kolekcję typu Hashtable należy pamiętać, że każdy wpis jest wpisem słownikowym składającym się z klucza i wartości, a kolekcja kluczy musi być unikatowa.
W zależności od tego, czy przekształcamy całą kolekcję jak w pytaniu, czy dane jednego obiektu, można zastosować dwa podejścia.
W pierwszym przypadku wystarczy określenie, która informacja jest kluczem, a która wartością w ramach cmdletu ForEach-Object:
gsv | % -Begin {$sv=@{}} -Process {$sv.Add($_.Name,$_.DisplayName)}
Powyższy kod tworzy słownik $sv z kluczem będącym nazwą usługi (właściwość Name) i wartością zawierającą nazwę wyświetlaną (DisplayName).
W sytuacji gdy przepisanie dotyczy jednej instancji obiektu, można wykorzystać kolekcję Properties:
(gsv vss).psobject.properties | % -Begin {$tm=@{}} -Process {$tm.Add($_.Name,$_.Value)}
Dla jasności w powyższych przykładach użyto aliasów:
gsv - Get-Service
% - ForEach-Object