Powershell: wyświetlenie informacji o procesie i użytkowniku jednocześnie

2-Sie-2017

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!

Dodaj komentarz:

Autor: Rafał Kraik