web-dev-qa-db-fra.com

Le planificateur de tâches Windows conserve le 0x41301

J'ai écrit le fichier .PS1 suivant: -

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

et j'ai défini une tâche dans le planificateur de tâches R2 de Windows Server 2012 pour appeler Te ci-dessus le fichier PS1.Now i Exécutez cette tâche manuellement, mais il continue de montrer "0x41301", ce qui signifie qu'il est toujours en cours d'exécution ... Bien que si je cours directement le Code ci-dessus à l'intérieur de la fenêtre PowerShell, il se terminera en moins d'une seconde? Alors, pourquoi appeler ce PS1 à l'aide de tâches Schuler ne se termine jamais?

--Edit-- Voici le XML exporté: -

<?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>
5
John John

Je crois que cela montre le problème:

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

Vous ne devriez pas simplement mettre un script .ps1 en tant que commande que vous souhaitez exécuter, cela le fera échouer ou faire des choses bizarres. :)

Au lieu de cela dans la tâche, changez le "programme/script" que vous souhaitez exécuter à:

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

Ajoutez le script via le champ "Arguments" de la tâche, ainsi que les modifications de la stratégie d'exécution (si nécessaire). c'est à dire:

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

Vous voudrez peut-être aussi modifier le champ "Démarrer in" pour correspondre au chemin que le script existe dans, c'est-à-dire: C:\Users\user.service\Documents\.

Conseil, ne stockez pas le script dans le dossier de profil d'un utilisateur, car il peut causer des problèmes d'accès. Placez plutôt un dossier (en dehors du dossier Users) pour contenir votre (s) script (s) et assurez-vous que le compte d'utilisateur utilisé pour exécuter la tâche a un accès approprié.

9
Ƭᴇcʜιᴇ007

J'ai eu ce problème car j'avais la tâche réglée sur "Exécuter si l'utilisateur est connecté ou non" .. Lorsque je l'ai changé pour "exécuter uniquement lorsque l'utilisateur est connecté" et l'a testé, j'ai réalisé que j'ai eu une pause dans une de mes fichiers de lots que j'ai oublié de supprimer!

Je sais que ce n'est probablement pas connexe mais j'espère que cela aide quelqu'un à l'avenir!

0
Kyle

Ou simplement dans "Action" Tab Remplir le programme/script: POWERSHELL AddArguments (facultatif): - non interactif -file "C:\YourScript.ps1"

0
user881879