Frage

Ich versuche, eine cmd-Datei auf einer Liste von 48 Computern auszuführen. Ich möchte nicht, auszuführen und für den Abschluss der Reihe zu warten, weil jeder cmd ca. 10 Minuten in Anspruch nimmt. WinRM ist keine Option. Weder ist WMI. PSExec ist eine Option .... aber ich kann nicht scheinen, um es innerhalb von Start-Job zu arbeiten.

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 schafft eine Reihe von Jobs .... aber die nie abgeschlossen, und wenn ich Receive-Job auf einen von ihnen 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 ausführen:

& $sb -computer "serverw01"

Initiieren Skript in Powershell v2.0 auf Server 2008R2 Feld laufen Ich habe es auf einem Feld in domain2 versucht, während in mit einem Domain-Admin-Benutzer-ID (gleiche Ergebnis) protokolliert.

War es hilfreich?

Lösung

Versuchen Sie, diese für den psexec Befehl, um sicherzustellen, Sie sind „-d“ nicht auf Antwort zu warten, und setzen Sie den Computer Variable direkt nach psexec:

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

Andere Tipps

Dieses hängende Problem tritt auf Win2003 und Win2008 Server.

Die meisten Menschen lösen dieses Problem mit einer Vermeidung des Problems wie Echo und Rohrleitungen, so dass Powershell eine Eingabe von STDIN wird.

Aber es gibt eine Lösung innerhalb von Powershell. Nur Powershell mit der Option -inputformat keine beginnen wie:

powershell -inputformat none -command ...

Bitte versuchen Sie den -accepteula Parameter psexec wie

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

von

$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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top