PowerShell實現(xiàn)獲取進程所有者
適用于PowerShell 3.0或者和更高版本。
Get-Process 能夠獲取當前運行的所有進程的列表,但是它不會返回進程的所有者信息,如果在PowerShell查詢進程的所有者信息,我們需要調(diào)用WMI服務。下面給出一個例子。
filter Get-ProcessOwner
{
$id = $_.ID
$info = (Get-WmiObject -Class Win32_Process -Filter "Handle=$id").GetOwner()
if ($info.ReturnValue -eq 2)
{
$owner = '[Access Denied]'
}
else
{
$owner = '{0}\{1}' -f $info.Domain, $info.User
}
$_ | Add-Member -MemberType NoteProperty -Name Owner -Value $owner -PassThru
}
荔非苔注:其實之前已經(jīng)發(fā)布過類似的文章,但是今天舊事重提,是因為在這篇中原文作者使用了過濾器,沒有使用函數(shù),值得借鑒。
當進程對象傳遞給Get-ProcessOwner后,它會在原有的對象上追加一個“Owner”屬性,默認這個屬性是隱藏的。你可以使用Selec-Object讓它顯示。
PS> Get-Process -Id $pid | Get-ProcessOwner | Select-Object -Property Name, ID, Owner
Name Id Owner
---- -- -----
powershell_ise 10080 TOBI2\Tobias
上面的過濾器函數(shù)也適用于多個對象:
PS> Get-Process | Where-Object MainWindowTitle | Get-ProcessOwner | Select-Object -Property Name, ID, Owner
Name Id Owner
---- -- -----
chrome 13028 TOBI2\Tobias
devenv 13724 TOBI2\Tobias
Energy Manager 6120 TOBI2\Tobias
ILSpy 14928 TOBI2\Tobias
(...)
注意要查看所有進程的信息,你需要讓PowerShell在管理員身份下運行。否則你只能看到所有者是你自己的進程,其它進程的所有者顯示:“Access Denied”。而且這樣的信息相對來說也沒有什么意義。
相關文章
Powershell小技巧之獲取當前的時間并轉(zhuǎn)換為時辰
這篇文章主要介紹了使用Powershell獲取當前的時間并轉(zhuǎn)換為時辰的方法,非常簡單實用,有需要的朋友可以參考下2014-09-09Powershell讀取本機注冊表中的所有軟件關聯(lián)擴展名
這篇文章主要介紹了Powershell讀取本機注冊表中的所有軟件關聯(lián)擴展名,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03