2010-07-01 21 views
6

Estoy tratando de ejecutar un archivo cmd en una lista de 48 computadoras. No quiero ejecutar y esperar la finalización secuencialmente porque cada cmd tarda unos 10 minutos en completarse. WinRM no es una opción. Tampoco lo es WMI. PSExec es una opción ... pero parece que no puedo hacerlo funcionar dentro de Start-Job.PSExec nunca termina cuando se ejecuta dentro de start-job

que estoy haciendo algo como:

$sb = { 
    param 
    (
     $computer = "serverw01", 
     $userid = "domain2\serviceid", 
     $password = 'servicepw', 
     $command = "cd /d d:\ && updateAll.cmd" 
    ) 

    d:\eps\pstools\PsExec.exe -u $userid -p $password "\\$($computer)" cmd /c $command 
} 

foreach ($computer in Get-Content "D:\Data\serverlist.txt") { 
    Start-Job $sb -ArgumentList $computer 
} 

Esto crea un montón de puestos de trabajo .... pero el nunca es completa y si recibo-Trabajo en cualquiera de ellos que vuelva

PS> get-job | receive-job -Keep 

    + CategoryInfo   : NotSpecified: (:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

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

se ejecuta muy bien si me quedo la función como:

& $sb -computer "serverw01" 

guión Iniciando se ejecuta en Powershell v2.0 en Ser ver 2008r2 box Lo he intentado en una caja en domain2 mientras estoy conectado con un ID de usuario de administrador de dominio (mismo resultado).

Respuesta

4

probar esto por el comando psexec, asegurando que incluya "-d" para no esperar la respuesta, y poner el equipo variable justo después psexec:

d:\eps\pstools\psexec "\\$($computer)" /accepteula -u $userid -p $password -d cmd /c $command 
+1

Gracias Lizz. La respuesta parece ser la ubicación del valor de la computadora. Lo intenté con y sin el -d y/accepteula (hace tiempo que acepté eula :)) y el factor habilitador fue asegurarme de que el valor del nombre de la computadora fuera el primer valor después de PSEXEC. –

0

favor trate el parámetro -accepteula a PSEXEC como

d:\eps\pstools\PsExec.exe -accepteula -u $userid -p $password 

from

+0

Gracias por la respuesta. Adición de resultados -accepteula en la misma respuesta + CategoryInfo: NotSpecified: (: String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError PsExec v1.98 - procesos de ejecutar remotamente Copyright (C) 2001 a 2010 Mark Russinovich Sysinternals - www.sysinternals.com –

0
$computerList = Get-Content "D:\Data\serverlist.txt"  
$sb = 
{ 
    param($name) 
     } 
      $computer = $name 
      $userid = "domain2\serviceid" 
      $password = 'servicepw' 
      $command = "cd /d d:\ && updateAll.cmd" 
      d:\eps\pstools\PsExec.exe -u $userid -p $password \\$computer cmd /c $command 
     { 
} 
foreach ($computer in $computerLinst) { 
    Start-Job $sb -ArgumentList $computer 
} 
2

Este problema de bloqueo se produce en los servidores Win2003 y Win2008.

La mayoría de las personas resuelve este problema con una solución alternativa como eco y tuberías para que powershell obtenga alguna entrada de STDIN.

Pero existe una solución dentro de powershell. Simplemente inicie powershell con la opción -inputformat none like:

powershell -inputformat none -command ... 
Cuestiones relacionadas