PSExec lista de shutdown de servidores

2

Eu tenho um sistema que herdei que usava um simples script psexec e uma lista de servidores para desligar automaticamente os servidores na lista caso um limite de temperatura fosse atingido ou o no-break tivesse apenas alguns minutos de bateria restante. Isso foi executado pelo AVTech Device Manager. Não está mais funcionando (e provavelmente não desde que eu estive aqui). Se eu executar o script manualmente a partir de um prompt de comando administrativo (Windows Server 2012 r2), recebo esse erro

The filename, directory name, or volume label syntax is incorrect.

O script em questão é assim

c:\avtech\psexec @c:\avtech\scripts\serverlist.txt c:\windows\system32\shutdown.exe -s -f -t 0 >"c:\avtech\log\shutdownlog.txt 2>&1

e o arquivo serverlist.txt é atualmente um arquivo com apenas uma entrada

server.domain.local

Se eu substituir o nome real do servidor pelo arquivo serverlist.txt, ele funcionará bem

C:\Windows\system32>C:\AVTECH\psexec \server.domain.local c:\windows\system32\shutdown.exe -s -f -t 0 >c:\shutdownLog.txt 2>&1

Portanto, tudo funciona muito bem se eu não tiver psexec agarrar a partir dessa lista de servidores. E, sim, o caminho para a lista de servidores está correto.

Sem dúvida há um erro simples e óbvio aqui em algum lugar, mas minha experiência com esse tipo de coisa é muito fraca, alguma idéia?

    
por Steve Chambers 06.07.2015 / 16:08

3 respostas

3

Em vez de brincar com o psexec para isso, por que não chamar shutdown.exe diretamente? com a opção /m ?

shutdown.exe -m \server.domain.local -s -f -t 0

Você pode até manter sua lista de servidores no mesmo arquivo usando um comando for. Veja a documentação se você quiser usar um não-padrão ( espaço e tabulação) delimitador:

for /f %%SERVER in (c:\avtech\scripts\serverlist.txt) do (
    shutdown.exe -m %%SERVER -s -f -t 0
)
    
por 06.07.2015 / 16:23
0

Posso recomendar PsShutdown ? Você parece mais inclinado para o PsTools, mas não acho que o PsExec seja a ferramenta adequada.

Para o encerramento, você pode iterar com um para loop Eu suponho?

    
por 06.07.2015 / 16:45
0

Eu costumo usá-lo assim:

psexec.exe \LAB-PC1 -u LAB-Pc01\admin -p S3cret! -i -d cmd /c shutdown /r /f /t 1 

Quebra de linha de comando:

(parte psexec)

  • -i Sessão interativa
  • -d não espere o processo terminar

(parte cmd)

  • shell do windows cmd no host remoto
  • / c Execute o comando e termine de aqui
  • comando de desligamento do windows shutdown
  • / r restart (/ h se você deseja desligar)
  • / f Força o encerramento, não espere pelos processos
  • / t 1 tempo limite de 1 segundo

Você pode substituir meu \ LAB-PC1 com seu @ server-list.txt e aplicá-lo a uma lista de hosts

EDITAR

C:\Users\LabAdmin\Desktop\push_software_installer>SO-psexec-server-list.cmd
C:\Users\LabAdmin\Desktop\push_software_installer>\lab.local\central-store\Software\psTools\psexec
@server-list.txt -u LABDOMAIN\administrador -p S3cret!! -i -d cmd /c w32tm /monitor > output.txt

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

Starting cmd on LAB-PC1...e on LAB-PC1...
cmd started on LAB-PC1 with process ID 30820.     <====
Couldn't access LAB-PC2-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC3-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC4-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC5-disabled:
O identificador Ú invßlido.
Connecting to LAB-PC5-disabled...
C:\Users\LabAdmin\Desktop\push_software_installer>'

Meu servidor-list.txt

LAB-PC1
LAB-PC2-disabled
LAB-PC3-disabled
LAB-PC4-disabled
LAB-PC5-disabled

Nota: minha linguagem de pc do laboratório está em PT-PT

Funciona no meu final:)

Espero que ajude

    
por 06.07.2015 / 16:55