sobota 1. srpna 2009

Hej, mistře Šelíku!

Po odmlce způsobené pracovní zátěží a poté zaslouženou dovolenou jsme se s mistrem Šelíkem vrátili zpět do práce.

Pro základní práci s procesy lze v PowerShellu použít cmdlet Get-Process (nebo můžete použít alias gps). Při prostém zadání bez parametrů vypíše seznam běžících procesů. Pokud vás zajímá konkrétní proces, stačí uvést jeho jméno.

PS C:\> Get-Process powershell
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
656 14 55592 63296 270 4,29 264 powershell

V případě, že chcete vypsat všechny informace, použijte Format-List
PS C:\> Get-Process powershell | Format-List *
V tomto případě bych se ovšem přikláněl k použítí aliasů

PS C:\> gps powershell | fl *
PS C:\> gps pow* | fl *

přičemž druhý zápis by mohl způsobit "problémy" pokud na vašem počítači poběží proces s názvem např. powercfg.

Jistě jste si všimli, že ve výpisu není nikde vidět vlastník procesu. Je tedy nutné - na radu mistra Skriptíka - použít přístup přes WMI. V PowerShellu je přístup do WMI geniálně jednoduchou záležitostí. Je několik možností, jak cmdlet Get-WmiObject použít. Nyní je nebudu porovnávat, ale beru to jako námět na další článek. Nebudu ani vypisovat výsledek, protože to vždy bude jméno uživatele, který proces spustil. Při práci z příkazové řádky vždy používám pro Get-WmiObject jeho alias gwmi - ušetřím tím přesně $("get-wmiobject".length - "gwmi".length) znaků :)

PS C:\> gwmi win32_process |? {$_.name -eq 'powershell.exe'} | % {$_.GetOwner().User}
PS C:\> (gwmi win32_process |? {$_.name -eq 'powershell.exe'}).GetOwner().User
PS C:\> (gwmi win32_process -filter "name='powershell.exe'").GetOwner().user
PS C:\> (gwmi -query "select * from Win32_Process where name='powershell.exe'").GetOwner().User

Banner mistra Skriptíka je stažen ze stránek TechNet Flash zpravodaje. Děkuji týmu TechNetu za možnost jeho použití pro potřeby tohoto článku.

Žádné komentáře: