Запустите сценарий PowerShell при запуске службы

Я хотел бы установить Affinity а также Priority процесса службы, когда он запущен (без изменения кода службы / процесса, я не владею кодом, это сторонняя служба).

Я знаю, что могу сделать:

$Process = Get-Process MyService $Process.ProcessorAffinity = 4

в PowerShell, чтобы изменить Affinity процесса или префикс командного пути с:

cmd.exe /c start "Some Process Name" /affinity 4

Однако ни один из них не применим к изменению Affinity а также Priority процесса службы автоматически при каждом запуске службы) Как я могу сделать это, не используя какое-либо стороннее приложение, которое "поддерживает" сходство процессов при перезапуске (я бы очень хотел написать / создать решение самостоятельно, а не полагаться на еще одно приложение) "настроить" окна).

2 ответа

Решение

Хорошо, я опираюсь на комментарий @Art.Vandelay05 и вот (ИМХО самое интуитивное) решение.

  1. Создать Script.ps1 Скрипт PowerShell со следующими строками:

    $Process = Get-Process
    $Process.ProcessorAffinity = <шестнадцатеричная версия битового кода для соответствия процессору>
  2. Идти к Administrative Tools/Task Scheduler а также Create Task... (НЕ Create Basic Task)
  3. Вкладка "Общие"
    • Проверьте Run, если пользователь вошел в систему или нет
    • Поменяйте пользователя или группу на локального пользователя на вашем компьютере
  4. Триггеры
    • Новый...
    • Включено
    • Начните задание на событие
    • Редактировать фильтр событий
    • Используйте немного XSLT найти сообщение для запуска вашего сервиса. Я использовал:

<QueryList> <Query Id="0" Path="System"> <Select Path="System"> *[EventData[Data[@Name="param1"] and (Data=" ")]] and *[EventData[Data[@Name="param2"] and (Data="running")]] </Select> </Query> </QueryList>

  1. действия
    • Действие Запустить программу
    • Программа / скрипт: PowerShell.exe
    • Добавьте аргументы (необязательно): -File "path_to_script \ Script.ps1"

Это оно! Теперь каждый раз, когда ваша служба запускается, привязка будет устанавливаться в соответствии с написанным вами сценарием PowerShell.

Изменить:убедитесь, что ваш локальный пользователь имеет Debug Programs право (Администрирование / Локальная политика безопасности / Назначение прав пользователя / Отладка программ / добавьте к этому праву вашего локального пользователя), иначе ваш пользователь не сможет изменить сходство процесса.

Посмотрите на этот пост: http://waynes-world-it.blogspot.ca/2009/06/processor-affinity-on-windows-server.html

Если вы пытаетесь управлять службой, вы можете использовать instsrv / srvany для создания службы, которая обернет команду start или psexec вокруг реального двоичного файла службы. Например, приведенные ниже команды создают другую версию службы диспетчера очереди, которая будет работать только на первом процессоре.

instsrv Test c:\util\srvany.exe 
reg add hklm\system\currentcontrolset\services\test\Parameters
reg add hklm\system\currentcontrolset\services\test\Parameters /v Application /t reg_sz /d cmd.exe 
reg add hklm\system\currentcontrolset\services\test\Parameters /v AppParameters /t reg_sz /d "/c start /affinity 1 C:\WINDOWS\system32\spoolsv.exe"
Другие вопросы по тегам