Execute o script do PowerShell com o Service Start

3

Gostaria de definir o Affinity e Priority de um processo de serviço quando ele é iniciado ( sem modificando o código de serviço / processo, < strong> don't possui o código, é um serviço de terceiros).

Eu sei que posso fazer:

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

no PowerShell para alterar o Affinity do processo ou prefixar o caminho do comando com:

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

No entanto, nenhum destes é aplicável a alterar automaticamente o Affinity e Priority do processo do serviço sempre que o serviço é started) Como posso fazer isso sem usando algum app de terceiros que 'mantenha' a afinidade do processo na reinicialização (eu realmente gosto de escrever / criar uma solução sozinho e não confiar em mais um aplicativo para 'configurar' janelas).

    
por XyberICE 30.10.2015 / 19:23

2 respostas

1

Ok, baseei-me no comentário do @ Art.Vandelay05 e aqui está a solução (IMHO mais intuitiva ).

  1. Crie o script Script.ps1 PowerShell com as seguintes linhas:

    $Process = Get-Process < service_process_exe_name_WITHOUT_the_exe >
    $Process.ProcessorAffinity = < versão hexadecimal do código de bits para a afinidade do processador >
  2. Ir para Administrative Tools/Task Scheduler e Create Task... (NÃO Create Basic Task )
  3. separador Geral
    • Marque Executar se o usuário está conectado ou não
    • Alterar usuário ou grupo para um usuário local em sua máquina
  4. Triggers
    • Novo ...
    • Ativado
    • Iniciar a tarefa Em um evento
    • Editar filtro de evento
    • Use um pouco de XSLT para encontrar a mensagem para o seu serviço sendo iniciado. Eu usei:

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

  1. Ações
    • Ação Iniciar um programa
    • Programa / script: PowerShell.exe
    • Adicionar argumentos (opcional): -Arquivo "path_to_script \ Script.ps1"

É isso! Agora, toda vez que seu serviço for executado, a afinidade será definida de acordo com o script do PowerShell que você escreveu.

Editar: Certifique-se que seu usuário local tem o Debug Programs ( Ferramentas Administrativas / Política de Segurança Local / Atribuição de Direitos de Usuário / Depurar programas / adicione seu local usuário para este direito) ou seu usuário não poderá alterar a afinidade de um processo.

    
por 03.11.2015 / 23:32
2

Veja este post: link

If you’re trying to control a service, you could use instsrv/srvany to create a service that wraps the start or psexec command around the real service binary. For example, the commands below create another version of the spooler service that will only run on the first processor.

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"
    
por 30.10.2015 / 19:40