1

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

# 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
        }
    }
}

当我执行这个命令时,所有的进程都设置为新的线程数,有什么建议可以让它只为特定用户调整线程吗?

非常感谢你们!这很紧急。

4

2 回答 2

0

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

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

或者速记可能如下所示:

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

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

于 2013-11-18T12:52:39.967 回答
0

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

而不是使用ProcessName,使用ProcessId

于 2013-04-15T21:13:52.863 回答