Robocopy Rückgabecodes in der Powershell
11. März 2016Viele „klassische“ Windows-Bordmittel lassen sich in Powershell-Skripten zu neuem Leben erwecken. Denn oftmals werden diese (noch aus der CMD-Ära stammenden) Werkzeuge in aktuelle Powershell-Skripte mit eingebaut. Diese lassen sich in der Powershell (PS) meist mit allen verfügbaren Parametern aufrufen. Damit haben die Systembetreuer Zugriff auf bewährte und geprüfte Tools auch in modernen“ PS-Jobs. Allerdings kommt es leider zu kleineren Einschränkungen. Etwa wenn das PS-Skript die Errorcodes solcher CMD-Programme auswerten, und dementsprechende Aktionen starten soll. Etwa falls die Synchronisierung eines Robocopy-Jobs fehlschlägt, und die Powershell daraufhin einen Text ausgeben, oder eine Email an den Administrator schicken soll.
Bei Tools wie „Robocopy.exe“ handelt es sich um externe Programme, die nicht als Cmdlet unter der Powershell zur Verfügung stehen. Daher gibt das Werkzeug auch keine Powershell-spezifischen Errorcodes aus. Somit werden versuche, die abschließende Ausgabe eines Robocopy-Jobs per „$error“ auszulesen oder weiterzuverarbeiten fehlschlagen. Dafür können die Administratoren aber die variable „$LastExitCode“ einsetzen, wie etwa folgendes Skript zeigt:
robocopy z:\documents C:\documents /MIR
if ($lastexitcode -eq 0)
{
write-host „Kopiervorgang erfolgreich“
}
else
{
write-host „Kopiervorgang fehlgeschlagen, Exit-Code:“ $lastexitcode
}
Falls der Kopiervorgang einwandfrei durchgelaufen ist ($lastexitcode gleich 0) meldet das Skript zum Abschluss „Kopiervorgang erfolgreich“, beziehungsweise „Kopiervorgang fehlgeschlagen“ gefolgt vom jeweiligen „Rückgabecode“ (exitcode).
Wie bei den meisten Programmen gilt auch bei Robocopy.exe, dass ein Rückgabecode von 0 einen erfolgreichen Abschluss anzeigt, während Werte von 1 oder darüber meistens auf Probleme oder Abbrüche hinweist. Im Falle von Robocopy können sich die Administratoren auf der entsprechenden Support-Seite
Florian Huttenloher