Основываясь на этом вопросе в StackOverflow, я могу изменить привязку процессора, если исполняемый файл запущен только в 1 экземпляре с помощью этой команды:

PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"

Если запущено 2 или более экземпляров, я не могу измениться, и это вывод

C:\PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"
The property 'ProcessorAffinity' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:30
+ $Process = Get-Process java; $Process.ProcessorAffinity=11
+                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

Кто-нибудь знает, как изменить Processor Affinity для всех экземпляров java.exe с помощью Powershell?

1 ответ1

3

Вы должны перебрать каждый объект, чтобы установить его ProcessorAffinity

| % {} в PowerShell означает ForEach-Object и в основном совпадает с оператором foreach() в других языках.

Как сказал root, вы можете удалить переменную, чтобы ваш код стал короче.

из окна cmd:

PowerShell "get-process java | % { $_.ProcessorAffinity=11 }"

в пакетном файле (пакетный файл обрабатывает % как переменную, поэтому вам нужно записать его 2 раза или переключиться на foreach):

PowerShell "get-process java | %% { $_.ProcessorAffinity=11 }"
PowerShell "get-process java | foreach { $_.ProcessorAffinity=11 }"

прямо в PowerShell:

get-process java | % { $_.ProcessorAffinity=11 }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .