適用于所有Windows PowerShell 版本
查看一個(gè)特定進(jìn)程的所有者用戶是誰,有多少個(gè)改進(jìn)程的實(shí)例,可以嘗試下面的代碼:
復(fù)制代碼 代碼如下:
$ProcessName = 'explorer.exe'
(Get-WmiObject -Query "select * from Win32_Process where name='$ProcessName'").GetOwner().User
注意:有許多不同的途徑可以獲取當(dāng)前登陸的用戶,但是由于你的操作系統(tǒng)版本的不同,所以方法不盡相同。如果使用圖形化用戶界面還好,但是如果是非用戶界面Core服務(wù)器,腳本可能不能檢測到當(dāng)前連接主機(jī)的用戶。
上面的例子返回了所有的“explorer.exe”進(jìn)程的所有者。如果你擁有管理員權(quán)限并且遠(yuǎn)程登陸了,用戶列表中還會(huì)可能會(huì)包括非活動(dòng)用戶。因?yàn)槊總€(gè)桌面上打開的 explorer.exe可能屬于不同的會(huì)話,不同的用戶。
如果使用了 Sort-Object 命令,可以非常容易排除重復(fù)項(xiàng)。
復(fù)制代碼 代碼如下:
$ProcessName = 'explorer.exe'
(Get-WmiObject –Query "select * from Win32_Process where name='$ProcessName'").GetOwner().User |
Sort-Object -Unique
并且,如果你更改了要查看的進(jìn)程的名稱,還會(huì)發(fā)現(xiàn)其它有趣的事情。下面的腳本會(huì)列出,當(dāng)前通過PowerShell遠(yuǎn)程管理連接到你機(jī)器的用戶:
復(fù)制代碼 代碼如下:
$ProcessName = 'wsmprovhost.exe'
try
{
(Get-WmiObject -Query "select * from Win32_Process where name='$ProcessName'").GetOwner().User |
Sort-Object -Unique
}
catch
{
Write-Warning "沒有發(fā)現(xiàn)用戶."
}