Geplantes Powershell-Skript bricht gelegentlich mittendrin ab

Geplantes Powershell-Skript bricht gelegentlich mittendrin ab

Ich habe einige Powershell-Skripte geplant und sie laufen normalerweise einwandfrei (sowohl als geplante Aufgabe als auch bei manueller Ausführung).

Ich habe das Problem, dass sie gelegentlich mitten in einem Skript einfach nicht mehr funktionieren.

Eines meiner Skripte sieht so aus:

start-transcript
write-host "Starting!"
foreach($blah in $blahblah)
{
   write-host "    $blah"
}
write-host "Finished"
stop-transcript

Das Seltsame ist, dass mir beim Betrachten des Transkripts dieses Muster auffällt:

**********************
Windows PowerShell transcript start
Start time: 20170116055439
Username  : domain\user 
Machine   : PCNAME (Microsoft Windows NT 6.1.7601 Service Pack 1) 
**********************
Transcript started, output file is GetMSOLLicensestoCSVTranscript.txt
Starting!
    blahitem1
    blahitem2
    ...
    blahitem 37675
**********************
Windows PowerShell transcript end
End time: 20170116060001
**********************   

Beachten Sie, dass es einfach mitten in der Schleife angehalten hat (es war nicht mit allen Daten fertig) und dass der Schreibhost „Fertig“ nie aufgerufen wurde.

Interessant fand ich, dass Powershell die Transkriptdatei trotzdem irgendwie geschlossen und die letzten vier Zeilen geschrieben hat.

Ich gehe zumindest davon aus, dass der Arbeitsspeicher voll ist, weiß aber nicht, wie ich feststellen kann, ob das wirklich der Fall ist.

Ich bin für alle Tipps zur Fehlerbehebung dankbar.

Antwort1

Ist der Code innerhalb der Schleife reines Powershell oder ruft er auf someCrazy.exe? Einige verrückte EXEs schreiben in die Konsole statt in die Standardausgabe, und diese Art von Fehler würde vom Transkript nicht erfasst. Sie könnten versuchen, die Powershell mit CMD zu umschließen, wodurch diese Art von Fehlertext erfasst werden könnte.

CMD.EXE /C "powershell -file c:\your\script.ps1" 2>&1 > c:\temp\cmdWrapper.log

Betreff: Fehlendes „Fertig“. Stop-transcriptist eine Möglichkeit, ein Transkript zu beenden. Wahrscheinlich führt der Fehler in der Schleife dazu, dass Powershell beendet wird. Das Transkript wird mit der normalen Schließmeldung beendet, wenn es powershell.exedurch das Ende des Taskplaners erzeugt wird.

Antwort2

Ok, die (peinliche) Antwort war also, dass das ein Fehler meinerseits war.

In der Windows-Aufgabenplanung können Sie an mehreren Stellen ein Zeitlimit festlegen: eines für die Gesamtaufgabe, das sich auf den Hauptregisterkarten befindet. Dort können Sie aber auch für jede angegebene Aufgabe ein Zeitlimit festlegen.

Wenn ich die geplante Aufgabe so einrichte, dass das Skript täglich ausgeführt wird, stelle ich es auf eine maximale Laufzeit von 1 Stunde ein.

Während also die Kombination aller Aufgaben insgesamt bis zu vier Stunden dauern kann, war die spezifische Unteraufgabe zum Starten von Powershell auf eine Stunde begrenzt.

Das ist mir entgangen, als ich nachgesehen und die 4-Stunden-Einstellung gesehen habe.

  • Jack

verwandte Informationen