2013-04-15 59 views
1

我的第一篇文章在這裏。我正在使用PowerShell處理腳本,目標是爲每個USER的進程設置一定數量的CPU線程,在這裏使用論壇,我能夠找到大部分答案,甚至讓我的腳本運行,除了,如果它設置親和力,它將它設置爲EVERY-Process,而不僅僅是我需要的用戶。 這裏是代碼(有註釋):PowerShell 3.0 - 根據用戶的進程設置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 
     } 
    } 
} 

當我執行這個命令,所有的過程都設置爲新的線程計數, 任何建議如何使它只調整爲特定的用戶線程?

非常感謝你們! 這非常緊急。

+0

如果我正確理解代碼,則不會爲**機器上的每個進程設置親和性,而是將它設置爲**每個進程的名稱都與用戶正在運行的**相同。那是對的嗎? –

回答

0

通過致電get-process -name $procName,您發現所有具有相同名稱作爲由用戶運行的一個進程。使用ProcessId而不是使用ProcessName

0

在PowerShell 4.0版中,您可以使用Get-Process cmdlet上的-IncludeUserName參數。獲得進程列表後,可以使用Where-Object cmdlet進行篩選,默認別名爲?

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

或短手可能是這樣的:

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

注意:使用-IncludeUserName參數需要權限提升。