Win32_Process.Getowner()在特定机器上非常慢

时间:2015-04-20 10:46:00

标签: powershell wmi powershell-v2.0 wmi-query wmic

我试图通过在powershell中运行此WMI查询来获取进程的所有者:

$processes = Get-WmiObject Win32_Process |where{$_.name -like "*notepad*"}
$objcol = @()
foreach ($process in $processes) 
{
    $owner = $process.GetOwner().User
    #$owner = $process.ProcessId
    $obj = New-Object System.Object
    $obj |Add-Member -MemberType NoteProperty -Name Owner -Value ($owner)
    $obj |Add-Member -MemberType NoteProperty -Name pid -Value $process.ProcessId
    $owner = "" 
    $objcol += $obj
} 
$objcol | ft  owner, pid -AutoSize |Out-String -Width 300 

但不知何故,在特定的机器(Windows Server 2008)上,完成这个简短的脚本需要30分钟。如果我删除了行" $ owner = $ process.GetOwner()。User",并将其替换为" $ owner = $ process.ProcessId",查询可以完成一些秒。但在其他计算机上(Windows Server 2003,2008,2012),没有这样的问题。所以我认为这与Win32_Process.Getowner()方法有关,但不确定如何。

有人可以帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试更简单的方法,安装PowerShell v4并使用

Get-Process -name 记事本 -IncludeUserName