Jak zwykle w powershell zadanie można zrealizować na dziesiątki sposobów, a ten poniżej to tylko jedna z propozycji
Get-WmiObject win32_process | Foreach { ` $ret=@{}; ` $ret['ProcessName']=$_.Name; ` $ret['Owner']=$_.GetOwner().User; ` $obj =New-Object -TypeName PSObject -Property $ret; ` $obj }
Co takiego się tutaj dzieje?
- Ponieważ polecenie Get-Process samo w sobie nie posiada możliwości wyświetlenia właściciela procesu korzystamy z Get-WmiObject dla klasy Win32_process, które…
- samo w sobie również nie ma informacji o użytkowniku, ale…
- posiadając obiekt klasy win32_process, można wywoływać jego metody.
- Dlatego dla obiektu $_ (konkretny proces) wywołujemy metodę GetOwner() i ze zwróconego obiektu pobieramy tylko nazwę użytkownika – reszta nas obecnie nie interesuje.
- Znalezione informacje o nazwie procesu i właścicielu umieszczamy w tablicy hashowanej $ret. Do deklarowania tablicy hash korzystamy z $ret=@{}, a następnie przypisujemy omówione wcześniej: nazwę procesu i właściciela.
- Mając hash table łatwo jest stworzyć obiekt. Po prostu wywołujemy New-Object wskazując że ma to być generyczny (pusty) obiekt a jego właściwości mają być pobrane z hash table, czyli będą to nazwa procesu i nazwa użytkownika.
- Ostatnia linijka zwraca ten obiekt. Voila!