2013-04-15 6 views
1

мой первый пост здесь. Я работаю над скриптом, использующим PowerShell, цель состоит в том, чтобы установить определенное количество процессорных потоков в процессе USER, используя форум здесь, я смог найти большинство ответов и даже получил свой скрипт для запуска, за исключением, если он устанавливает сродство, он устанавливает его в КАЖДОЙ процесс, а не только для пользователя, который мне нужен. вот код (с комментариями):PowerShell 3.0 - настройка близости к процессору на каждый ПРОЦЕСС ПОЛЬЗОВАТЕЛЯ

# 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 вы найдете все процессы, которые имеют то же имя, что и один пользователь.

Вместо использования ProcessName используйте ProcessId.

0

В версии PowerShell 4.0 вы можете использовать параметр -IncludeUserName в командлете Get-Process. После того, как у вас есть список процессов, вы можете затем фильтровать его с помощью командлета Where-Object, который имеет псевдоним по умолчанию ?.

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

Или стенография может выглядеть следующим образом:

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

Примечание: Использование параметра -IncludeUserName требуется повышение привилегий.