Windows-Aufgabenplaner zeigt weiterhin 0x41301 an

15511
John John

Ich habe die folgende .ps1-Datei geschrieben:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} $request = [System.Net.WebRequest]::Create("https://localhost/") $response = $request.GetResponse() $response.Close() 

und ich setze eine Task innerhalb des Windows Server 2012 R2 Task Taskplaners, um te über ps1 file aufzurufen. Jetzt führe ich diese Task manuell aus, aber sie zeigt immer "0x41301" an, was bedeutet, dass sie immer noch läuft ... obwohl, wenn ich direkt die über dem Code in PowerShell-Fenster endet es in weniger als einer Sekunde? Warum also wird der Aufruf dieser ps1 mit Aufgabe Schuler niemals enden?

--Edit-- Hier ist das XML exportiert: -

<?xml version="1.0" encoding="UTF-16"?> <Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2016-02-09T00:35:11.5514762</Date> <Author>ad-services\user.service</Author> </RegistrationInfo> <Triggers> <CalendarTrigger> <Repetition> <Interval>PT5M</Interval> <Duration>PT30M</Duration> <StopAtDurationEnd>false</StopAtDurationEnd> </Repetition> <StartBoundary>2016-02-09T19:30:01</StartBoundary> <Enabled>true</Enabled> <ScheduleByDay> <DaysInterval>1</DaysInterval> </ScheduleByDay> </CalendarTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>S-1-5-20</UserId> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>C:\Users\user.service\Documents\AppPoolActivation.ps1</Command> </Exec> </Actions> </Task> 
4
Sie können aktivieren, dass die Aufgabe immer in x Minuten, Stunden, Tagen usw. endet. Ist es wirklich ein Problem, die Aufgabe auf diese Weise zu beenden? Ich habe gesehen, dass ein Skript endet, aber der Prozess bleibt aus irgendeinem Grund aktiv. LPChip vor 8 Jahren 1
Können Sie das exportierte XML von Ihrer Aufgabe aus posten, damit wir genau sehen können, wie Sie es einrichten? Ƭᴇcʜιᴇ007 vor 8 Jahren 1
@LPChip Ich habe nicht verstanden, was mit meinem Skript falsch ist? John John vor 8 Jahren 0
@ Ƭᴇcʜιᴇ007 Ich bearbeite meine Frage mit der generierten XML-Datei. Kannst du das bitte prüfen? Vielen Dank John John vor 8 Jahren 0
@JohnJohn Mein Punkt ist, dass Ihr Skript fehlerfrei ausgeführt werden kann und bis zum Abschluss ausgeführt werden kann. Der Prozess bleibt jedoch weiterhin aktiv und verhindert, dass die geplante Task normal angehalten wird. LPChip vor 8 Jahren 0

3 Antworten auf die Frage

8
Ƭᴇcʜιᴇ007

Ich glaube das zeigt das Problem:

 <Actions Context="Author"> <Exec> <Command>C:\Users\user.service\Documents\AppPoolActivation.ps1</Command> </Exec> </Actions> 

Sie sollten nicht einfach ein .PS1-Skript in den Befehl einfügen, der ausgeführt werden soll. Das führt dazu, dass es fehlschlägt oder ungewöhnliche Dinge ausgeführt werden. :)

Ändern Sie stattdessen in der Task das "Programm / Skript", das Sie ausführen möchten:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 

Fügen Sie das Skript über das Feld "Argumente" der Aufgabe hinzu, und fügen Sie ggf. Änderungen der Ausführungsrichtlinie hinzu. dh:

-ExecutionPolicy Bypass -file "C:\Users\user.service\Documents\AppPoolActivation.ps1" 

Sie können auch das Feld "Start in" so ändern, dass es mit dem Pfad übereinstimmt, in dem sich das Skript befindet, z. B .: C:\Users\user.service\Documents\.

Ratschläge: Speichern Sie das Skript nicht im Profilordner eines Benutzers, da dies Zugriffsprobleme verursachen kann. Erstellen Sie stattdessen einen Ordner (außerhalb des UsersOrdners), in dem sich Ihre Skripts befinden, und stellen Sie sicher, dass das zur Ausführung der Aufgabe verwendete Benutzerkonto über den entsprechenden Zugriff verfügt.

Ich folge deinen Schritten und jetzt habe ich zuletzt 0x1 angezeigt? John John vor 8 Jahren 0
@JohnJohn 0x1 bedeutet erfolgreich, wenn ich mich nicht irre. LPChip vor 8 Jahren 0
@ Techie007 jetzt ist der einzige Ansatz, der in meinem Fall funktioniert, die Erstellung einer .bat-Datei, die die .pst-Datei aufruft. Im Task-Scheduler gebe ich den Pfad zur .bat-Datei im "Programm / Skript" an. .. John John vor 8 Jahren 0
@LPChip 0x0 ist ERFOLGREICH. Jeder Rückgabewert ungleich Null * bedeutet * normalerweise Fehler. Dan vor 7 Jahren 1
0
user881879

Oder einfach im "Action" -Register füllen Sie Programm / Skript: Powershell- Addarguments (optional): -NonInteractive -Datei "C: \ yourscript.ps1"

-1
Kyle

Ich hatte dieses Problem, da ich die Aufgabe auf "Ausführen, ob Benutzer angemeldet oder nicht" gesetzt hatte. Als ich auf "Nur ausführen, wenn Benutzer angemeldet ist" umgestellt und es getestet habe, wurde mir klar, dass ich eine PAUSE in einem hatte meiner Batch-Dateien, die ich vergessen habe zu entfernen!

Ich weiß, dass dies wahrscheinlich nicht verwandt ist, aber hoffentlich hilft es jemandem in der Zukunft!

VLQ-Prüfer: Dies ist ein legitimer Versuch, die Frage zu beantworten. Ein "Pause" -Befehl würde tatsächlich den vom OP gemeldeten Taskstatuscode erzeugen. Twisty Impersonator vor 6 Jahren 1
Es löst auch mein Problem sam vor 5 Jahren 0