Exchange PowerShell in einer geplanten Aufgabe wird für immer ausgeführt


8

Ich habe einige PowerShell-Skripts für Exchange 2010, die ich als geplante Aufgaben ausführen möchte.

Wenn ich PowerShell mit "Als anderer Benutzer ausführen" starte, kann ich die Skripte ausführen und sie werden korrekt ausgeführt.

Wenn ich eine Aufgabe mit demselben Benutzer plane, bleibt die Aufgabe für immer im Status "Ausführen".

Wie kann ich herausfinden, wo die Aufgabe stecken bleibt?

Als Referenz, hier ist, wie ich das Exchange-Zeug aktiviere:

. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

Und hier sind die Möglichkeiten, wie ich versucht habe, das Skript über den Taskplaner auszuführen:

  • Powershell-Befehl "& {. 'c: \ windows \ script.ps1'}"
  • Powershell-Datei 'c: \ windows \ script.ps1'
  • Powershell-Datei "c: \ windows \ script.ps1"

Alle mit dem gleichen Ergebnis. Grr ...


Spät zur Party kommentieren, aber ich hatte das gleiche Verhalten. Eine geplante Aufgabe, die mit PowerShell registriert wurde Register-ScheduledJob, endete nie, nachdem ich meine PowerShell-Konsole und ISE geschlossen hatte.
user4317867

Antworten:


3

Sie müssen entweder Ihre Ausführungsrichtlinie ändern oder den -ExecutionPolicy Bypassals Befehlszeilenparameter angeben .

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass

1
Ich habe meinen Befehlszeilenparametern die Option ExecutionPolicy hinzugefügt. Keine Änderung; Aufgabe läuft immer noch für immer.
Longneck

2

Ich bin mir nicht sicher, ob Sie dies so tun, aber wenn ich PowerShell-Skripte über den Taskplaner ausführe, verwende ich die Aktion "Programm starten", wähle Powershell aus und füge dann die Argumente von dort hinzu. Das ist vielleicht das, was Sie hier tun, aber es ist irgendwie unklar. Hier ist ein Screenshot: Geben Sie hier die Bildbeschreibung ein

Laut TheCompWiz kann die Ausführungsrichtlinie ebenfalls ein Problem sein.


Das ist nicht einmal eine gültige Befehlszeilensyntax für Powershell.exe, aber nur zum Teufel habe ich es versucht. Die Aufgabe ist sofort fehlgeschlagen.
Longneck

Interessant, weil alle meine täglichen Powershell-Aufgaben so ablaufen und gut funktionieren.
ZnewmaN

C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ Powershell.exe -Befehl "& 'c: \ windows \ script.ps1'"
ZnewmaN

Ah, da ist der Unterschied. Ihr Screenshot zeigt nicht den-command
Longneck

Ja, ich persönlich benutze -command eigentlich nicht, aber es ist wahrscheinlich die richtige Verwendung.
ZnewmaN

0

Ich hatte das gleiche Problem. In meinem Fall bestand die Lösung darin, das Verzeichnis "Start in" anzugeben (mein Skript las den Inhalt einer Datei, die es nicht finden würde, weil ich nicht den vollständigen Pfad zur Datei angegeben hatte).


0

Ich hatte das gleiche Problem und der Kommentar von "user279399" zur Verwendung des Befehls taskkill war super hilfreich, musste nur geändert werden. Hier ist meine Lösung am Ende der Argumentsyntax

taskkill /f /fi "USERNAME eq domain\exchadmin" /im powershell.exe

Dieser Befehl beendet nur die Powershell-Sitzung, die unter diesem Benutzerkonto ausgeführt wird. Es wird empfohlen, ein separates Exchange-Administratorkonto für die Ausführung geplanter Aufgaben zu haben.


-3

Versuchen Sie, am Ende Ihres Skripts [taskkill / f / im "Powershell.exe"] hinzuzufügen. Dadurch werden alle "Powershell.exe" -Prozesse beendet. Ich weiß nicht, wie ich den aktuellen Power-Shell-Prozess beenden soll (entspricht [cmd.exe / c]). Aber es wird den Trick machen.


Und was wäre, wenn andere Powershell-Skripte ausgeführt würden, die wahrscheinlich etwas Wichtiges tun würden? Würden Sie diese Prozesse einfach beenden, ohne zu fragen? In einer Produktionsumgebung? Als Routine? Ernsthaft?!
Esa Jokinen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.