PowerShell 3.0 - 为每个USER的进程设置CPU的亲和力

时间:2013-04-15 20:35:08

标签: powershell set cpu affinity

我在这里的第一篇文章。我正在使用powerShell编写脚本,目的是为每个USER的进程设置一定数量的CPU线程,使用此处的论坛,我能够找到大部分答案,甚至让我的脚本运行,除了,如果它设置了亲和力,它会将它设置为EVERY-Process,而不仅仅是我需要的用户。 这是代码(带注释):

# GET LIST of all process running
$pList = get-wmiobject win32_process

# loop through created array and get the OWNER of the processes
foreach ($p in $pList) {
    #If "myUserName" is found:
    if ($p.getowner().User -eq 'myUserName') {
        # get process name
        $procName = $p.ProcessName
        # trim STRING to remove EXE
        $procName = $procName.Replace('.exe','')
        # use get-process to make array of processes run by "myUserName"
        $activeProc = Get-Process -name $procName
        # Loop to set affinity for each process

        foreach ($i in $activeProc){
            $i.ProcessorAffinity=0xFE
        }
    }
}

当我执行此命令时,所有进程都设置为新的线程计数, 任何建议如何使它只调整SPECIFIC用户的线程?

非常感谢! 这非常紧急。

2 个答案:

答案 0 :(得分:0)

通过调用get-process -name $procName,您将找到与用户运行的具有相同名称的所有进程。

不使用ProcessName,而是使用ProcessId

答案 1 :(得分:0)

在PowerShell 4.0版中,您可以使用-IncludeUserName cmdlet上的Get-Process参数。获得进程列表后,可以使用Where-Object cmdlet进行过滤,该cmdlet的默认别名为?

Get-Process -IncludeUserName | Where-Object -FilterScript { $PSItem.UserName -match 'system' };

或者说空手可能是这样的:

gps -inc | ? { $_.UserName -match 'system' };

注意:使用-IncludeUserName参数需要提升权限。