PowerShell-Script wird per Aufgabenplanung nicht ausgeführt
Mahlzeit!
Auf einem 2012 Server mit 2013 Exchange lasse ich einige Dinge automatisiert ablaufen, dazu gibt es diverse PowerShell-Scripts, die per Windows Aufgabenplanung gestartet werden. Alle Scripts laufen wunderbar, nur das neueste will nicht. Das hier passiert:
- direkt in der PS-Console funktioniert es (komplettes Script hineinkopiert)
- per Verknüpfungsaufruf funktioniert es
- beim Aufruf per Aufgabenplanung sehe ich zwar im Taskmanager, dass die PS läuft, es bewegt sich auch ein wenig der Arbeitsspeicher, aber das war es dann auch schon. Die PS wird nicht mehr beendet, obwohl ich angegeben habe, dass sie nach 30 Minuten beendet werden soll.
Es sollen nur ein paar Informationen zu Exchange-Konten ausgelesen, in eine csv-Datei exportiert und per Mail verschickt werden. Wie gesagt: manuell ausgeführt kein Problem, das Script also passt. Die Einstellungen habe ich mit anderen, funktionierenden Aufträgen verglichen: alles gleich. Vier-Augen-Check von einem Kollegen: ich habe mich bei der ps1-Datei verschrieben. Das hätte aber einen Fehler geben müssen. Fehler korrigiert: gleiches Ergebnis.
Was für Lösungen musstet Ihr mal anwenden, damit etwas, das keinerlei Fehler produziert, zumindest sagt, was nicht geht?
Ich, der Jörg
Auf einem 2012 Server mit 2013 Exchange lasse ich einige Dinge automatisiert ablaufen, dazu gibt es diverse PowerShell-Scripts, die per Windows Aufgabenplanung gestartet werden. Alle Scripts laufen wunderbar, nur das neueste will nicht. Das hier passiert:
- direkt in der PS-Console funktioniert es (komplettes Script hineinkopiert)
- per Verknüpfungsaufruf funktioniert es
- beim Aufruf per Aufgabenplanung sehe ich zwar im Taskmanager, dass die PS läuft, es bewegt sich auch ein wenig der Arbeitsspeicher, aber das war es dann auch schon. Die PS wird nicht mehr beendet, obwohl ich angegeben habe, dass sie nach 30 Minuten beendet werden soll.
Es sollen nur ein paar Informationen zu Exchange-Konten ausgelesen, in eine csv-Datei exportiert und per Mail verschickt werden. Wie gesagt: manuell ausgeführt kein Problem, das Script also passt. Die Einstellungen habe ich mit anderen, funktionierenden Aufträgen verglichen: alles gleich. Vier-Augen-Check von einem Kollegen: ich habe mich bei der ps1-Datei verschrieben. Das hätte aber einen Fehler geben müssen. Fehler korrigiert: gleiches Ergebnis.
Was für Lösungen musstet Ihr mal anwenden, damit etwas, das keinerlei Fehler produziert, zumindest sagt, was nicht geht?
Ich, der Jörg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 344430
Url: https://administrator.de/contentid/344430
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
17 Kommentare
Neuester Kommentar
Hallo,
an unserem Exchange Server erstelle ich über ein Powershell Script täglich Statistiken die per E-Mail versendet werden. Mit dem direkten Aufruf von Powershell Scripts über die Aufgabenplanung hatte ich auch schon öfters mal Problemchen. Mittlerweile trage ich da eine Batch ein die das Powershell Script aufruft.
Inhalt der Batch ist dann einfach...
Evtl. hilfts...
Gruss
Dirk
an unserem Exchange Server erstelle ich über ein Powershell Script täglich Statistiken die per E-Mail versendet werden. Mit dem direkten Aufruf von Powershell Scripts über die Aufgabenplanung hatte ich auch schon öfters mal Problemchen. Mittlerweile trage ich da eine Batch ein die das Powershell Script aufruft.
Inhalt der Batch ist dann einfach...
powershell.exe -noprofile -executionpolicy bypass -File "C:\pfad\zum\powershellscript.ps1"
Evtl. hilfts...
Gruss
Dirk
Hi,
inwieweit das PowerShell Logging hier helfen könnte, hängt von Deinem konkreten Code ab.
Ansonsten könntest Du ein einfaches Debug-Log schreiben lassen. Beginne eine Textdatei und schreibe bei allen neuralgischen Programmschritten "tue gerade dies", "tue gerade das". Wichtig ist, dass das sofort runtergeschrieben wird. Am besten noch mit Zeitangabe. Wenn der Task dann wieder hängt, dann schaust Du ins Log, wie weit er gekommen ist.
E.
inwieweit das PowerShell Logging hier helfen könnte, hängt von Deinem konkreten Code ab.
Ansonsten könntest Du ein einfaches Debug-Log schreiben lassen. Beginne eine Textdatei und schreibe bei allen neuralgischen Programmschritten "tue gerade dies", "tue gerade das". Wichtig ist, dass das sofort runtergeschrieben wird. Am besten noch mit Zeitangabe. Wenn der Task dann wieder hängt, dann schaust Du ins Log, wie weit er gekommen ist.
E.
Start-Transcript "c:\pfad\log.txt"
# euer Code
#...
Stop-Transcript
Unter Ausführen "PowerShell.exe" eintragen, unter Argumente -File "c:\pfad\script.ps1"
Gruß
"Mit höchsten Privilegien": nein, das wird dann vom Administrator ausgeführt, ich habe für mich aber einen eigenen User
Gerade dann kann das aber erforderlich sein! Wenn die Aktionen administrative Berechtigungen erfordert, welche über die Gruppe der lokalen Administratoren geerbt werden (u.a. auch Privilegien), dann musst Du die Aufgabe "mit höchsten Privilegien" ausführen oder UAC für diesen Computer komplett deaktivieren.Irgendwie passt der Rest von dem, was Du schreibst, nicht zusammen. Wenn das Problem sein soll, dass Du den Task nicht manuell starten kannst, wenn er auf "monatlich" steht, wie passt das zusammen, dass die Aufgabe auf "wird ausgeführt" stehen soll? Du kannst Sie dann nicht starten, weil sie noch läuft, und nicht, weil es dann wegen "monatlich" nicht geht.
Oder willst Du sagen, dass die Aufgabe (der gestartete PowerShell-Prozess) nur dann hängt, wenn "monatlich" eingestellt ist? Das klingt nonsens.
Dein letzter Satz, der wie Nonsens klingt, ist genau das, was Sache ist. Genau so sieht es aus. Stelle ich auf wöchentlich / täglich / sonstwas: läuft. Stelle ich auf monatlich: läuft nicht.
Du hast meine Fragen nicht beantwortet.Das mit den Rechten und so: der Original-Admin wurde genau zur Erstinstallation der Domäne verwendet und danach nie wieder (Passwort sicher verwahrt und so...). DC und Exchange werden seit rund anderthalb Jahren von mir mit meinem User administriert, der technisch ebenfalls Domänenadmin ist, also alles dürfen sollte. Das Script selbst macht nichts Wildes: Datum in eine Variable rein (für die Dateinamen später), abfragen, wie die Postfachbelegung pro Postfach ist, das Ganze in eine csv exportieren und als Mail versenden. Kein Rechte-Drama also, ein Dreizeiler praktisch).
Wie der User zu seinem Privilegien kommt ist vollkommen egal. Wenn er sie nutzen will und UAC ist aktiviert, dann muss der Prozess eleviert sein. Fertig aus. Bei Aufgabe "höchste Privilegien"Bezogen auf Deinen Fall könnte die Falle beim Speichern der Datei liegen, also wo die CSV gespeichert wird.
Aber egal, ich habe verstanden, dass das Script ja noch nicht einmal zu beginnen scheint, also schon die erste Zeile nicht mehr ausgeführt wird.
Exportiere den Task doch mal bitte als XML damit wir hier nicht raten müssen was du als Argumente etc. "genau" verwendest.
Wieso nutzt du nicht New-PSSession um eine Verbindung zum Exchange herzustellen?? Geht schnell und schmerzlos und von überall auch ohne Exchange Modul.
Nein, dem ist nicht so. Die Exchange Tools binden noch einige normalerweise für einfache Dinge überflüssige Serialization Skripte mit ein und das ist anfälliger als mit PSSession die pure Verbindung zur Nutzung der CMDLets herzustellen.