2010-07-01 14 views
6

Sto provando ad eseguire un file cmd su un elenco di 48 computer. Non voglio eseguire e attendere il completamento in sequenza poiché ogni cmd impiega circa 10 minuti per essere completato. WinRM non è un'opzione. Né è WMI. PSExec è un'opzione .... ma non riesco a farlo funzionare all'interno di Start-Job.PSExec non viene mai completato quando viene eseguito all'interno di start-job

che sto facendo qualcosa di simile:

$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 
} 

Questo crea un sacco di posti di lavoro .... ma la non completa e se ricevo-Job su uno di essi mi rimetto

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 

esegue bene se corro la funzione come:

& $sb -computer "serverw01" 

script di avvio viene eseguito in PowerShell v2.0 su Ser ver 2008r2 box L'ho provato su una casella in domain2 quando ho effettuato l'accesso con un ID utente di dominio admin (stesso risultato).

risposta

4

Prova questa per il comando psexec, assicurando si include "-d" per non aspettare per la risposta, e mettere il computer a destra variabile dopo PsExec:

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

Grazie Lizz. La risposta sembra essere il posizionamento del valore del computer. L'ho provato con e senza -d e/acceptteula (ho accettato da tempo eula :)) e il fattore abilitante è stato assicurarsi che il valore del computername fosse il primo valore dopo PSEXEC. –

0

riprova il parametro -accepteula a PsExec come

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

from

+0

Grazie per la risposta. L'aggiunta di risultati -accepteula nella stessa risposta + CategoryInfo: NotSpecified: (: String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError PsExec v1.98 - eseguire i processi in remoto Copyright (C) 2001-2010 Mark Russinovich di 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

Questo problema si verifica sui server Win2003 e Win2008.

La maggior parte delle persone a risolvere questo problema con una soluzione come l'eco e le tubazioni in modo che PowerShell ottiene qualche input da STDIN.

Ma esiste una soluzione all'interno di PowerShell. Basta avviare powershell con l'opzione -inputformat uguale a:

powershell -inputformat none -command ... 
Problemi correlati