Por que meu script do PowerShell é interrompido quando chamado no PSEXEC por meio de um arquivo em lotes (.cmd)?

4

Estou tentando executar remotamente um script do PowerShell usando PSEXEC . O script do PowerShell é chamado por meio de um arquivo em lote .cmd . A razão pela qual fazemos isso é alterar a política de execução, executar o script powershell e redefinir a política de execução novamente:

No servidor remoto do-tasks.cmd se parece com:

powershell -command "&{ set-executionpolicy unrestricted}"  
powershell DoTasks.ps1  
powershell -command "&{ set-executionpolicy restricted}"  

O script do PowerShell DoTasks.ps1 só faz isso por enquanto:

Write-Output "Hello World!"

Ambos os scripts vivem em c:\windows\system32 (por enquanto) apenas para estarem no PATH.

No servidor de origem, faço isso:

psexec \web1928 -u administrator -p "adminpassword" do-tasks.cmd

Quando isso é executado, recebo a seguinte resposta na linha de comando:

c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}"

e o script não é mais executado.

Não consigo ctrl-c para quebrar o script e vejo apenas caracteres ^ C, posso digitar a entrada do teclado e os caracteres são ecoados para o console.

No servidor remoto, vejo que o PowerShell.exe e o CMD.exe estão sendo executados na guia Processo do Gerenciador de Tarefas. Se eu terminar esses processos, o controle retornará à linha de comando no servidor de origem.

Eu tentei isso com apenas um simples arquivo em lote .cmd com @echo hello world e funciona muito bem.

A execução de do-tasks.cmd no servidor remoto por meio de uma sessão RDP também funciona bem.

O servidor de origem está executando o Windows 2003 SP2, o servidor remoto está executando o Windows 2008 SP2.

Por que meu arquivo de lote remoto fica preso ao executar por meio de PSEXEC ?

    
por Kev 23.04.2010 / 01:22

3 respostas

0

Como o servidor está executando o 2k8, suspeito que o UAC esteja causando problemas. Eu também sugiro usar winrm em vez de psexec. Remoting Powershell foi um dos melhores novos recursos do PowerShell 2.0

    
por 23.04.2010 / 02:10
11

Este é um problema comum com o POSH. O problema é stdin trava. Tente isto:

c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}" < NUL
    
por 16.06.2010 / 22:09
5

A maioria das respostas nos fóruns resolve isso com uma solução alternativa como ecoar e canalizar para que o powershell receba alguma entrada do STDIN.

Mas existe uma solução dentro do powershell. Basta iniciar o powershell com a opção -inputformat nenhum como:

powershell -inputformat none -command ...

Isso resolve o problema pendente via psexec para Win2003 e Win2008.

    
por 12.12.2014 / 21:42