Ich versuche, eine cmd-Datei auf einer Liste von 48 Computern auszuführen. Ich möchte nicht ausführen und warten auf die Fertigstellung der Reihe nach, weil jeder cmd ungefähr 10 Minuten dauert, um abzuschließen. WinRM ist keine Option. WMI ist auch nicht. PSExec ist eine Option .... aber ich kann nicht scheinen es innerhalb von Start-Job arbeiten.PSExec wird nie abgeschlossen, wenn innerhalb von Start-Job ausgeführt
Ich mache so etwas wie:
$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
}
Dies ein paar Arbeitsplätze schafft .... aber die nie abgeschlossen, und wenn ich auf einem von ihnen Receive-Job i zurück
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
es führt nur in Ordnung, wenn ich die Funktion wie laufen:
& $sb -computer "serverw01"
Initiieren Skript ausgeführt wird in Powershell v2.0 auf Ser ver 2008r2 box Ich habe es auf einer Box in Domain2 versucht, während mit einer Domain-Admin-Benutzer-ID (dasselbe Ergebnis) angemeldet.
Danke Lizz. Die Antwort scheint die Platzierung des Computerwertes zu sein. Ich habe es mit und ohne -d und/accepteula probiert (ich akzeptiere seit langem eula :)) und der Aktivierungsfaktor stellte sicher, dass der Computername-Wert der erste Wert nach PSEXEC war. –