5 votes

Windows Server 2008 R2 PowerShell script s'exécute manuellement, mais pas en tant que tâche planifiée.

J'ai un script PowerShell qui s'exécute manuellement à l'aide de la commande PowerShell ISE . Cependant, lorsqu'elle est exécutée en tant que tâche planifiée à l'aide des informations d'identification d'un administrateur, la tâche ne s'exécute pas avec les résultats escomptés.

Le script :

$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")

L'utilisateur administrateur a Contrôle total du script et du dossier dans lequel il est écrit. L'URL existe et répond dans un délai raisonnable (moins d'une seconde).

Si j'exécute la tâche manuellement, le statut est 0x41301 ("Currently Running") jusqu'à ce que je finisse par l'arrêter. J'ai configuré la tâche en utilisant ces deux méthodes :

  1. Lancez un programme : C:\path\to\PS.PS1
  2. Lancez un programme : C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe avec des options supplémentaires -noninteractive -command "C:\path\to\PS.PS1"

En utilisant l'option 1, l'historique des tâches montre qu'il a ouvert une instance de notepad.exe, mais il ne la termine jamais. Avec l'option 2, la tâche est terminée, mais le fichier n'est pas téléchargé ni créé.

J'ai utilisé Set-ExecutionPolicy Unrestricted car ce n'est pas un script signé.

Comment puis-je résoudre ce problème ?

6voto

Kwexi Points 610

Comme vous exécutez un fichier script au lieu d'un bloc script, le paramètre que vous devez utiliser est -File.

De plus, la définition de la politique d'exécution à l'aide du cmdlet Set-ExecutionPolicy ne garantit pas que le script soit exécuté dans ce contexte. La politique d'exécution effective pourrait être écrasée par une politique de groupe (GPO). Pour forcer cette sur sur l'exécution du fichier, utilisez le paramètre -ExecutionPolicy.

La commande que vous recherchez est la suivante

powershell.exe -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File c:\path\ps.ps1

De plus amples informations sur ces paramètres sont disponibles aquí .

1voto

jessenich Points 301

Le fichier script que vous essayez d'exécuter n'est pas un fichier de confiance natif. Utilisez une esperluette devant le chemin du fichier pour exécuter la commande :

Powershell.exe -ExecutionPolicy Unrestricted -Command { & 'C:\path\to\PS.PS1' }

D'autres paramètres de démarrage PowerShell peuvent être trouvés dans Aide en ligne de commande PowerShell.exe .

0voto

humanzz Points 307

Pouvez-vous confirmer votre politique d'exécution pour toutes les portées, par :

Get-ExecutionPolicy -List

Si vous définissez le LocalMachine politique pour Signé à distance vous devriez être en mesure d'avoir une définition de tâche comme :

Commencez : C:\Windows\System32\WindowsPowerShell\v1.0

Cours : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -Fichier c : \path\to\ps.ps1

0voto

Prognox Points 1

Bien que vous ayez peut-être déjà trouvé une solution à votre problème, je vais quand même poster cette note pour en faire profiter quelqu'un d'autre. J'ai rencontré un problème similaire. J'ai essentiellement utilisé un compte de domaine différent pour tester et comparer. La tâche s'est exécutée sans problème lorsque l'option "Run whether user is logged on or not" était cochée.

Il y a deux choses à garder à l'esprit et à s'assurer :

  1. Le compte utilisé pour exécuter la tâche doit avoir les droits "Logon as batch job" dans la politique de sécurité locale du serveur (ou être membre du groupe Admin local). Vous devez spécifier le compte dont vous avez besoin pour exécuter les fichiers scripts/bat.
  2. Assurez-vous que vous saisissez les bons caractères du mot de passe
  3. Les tâches dans 2008 R2 ne s'exécutent pas de manière interactive, surtout si vous les exécutez en tant que "Run whether user is logged on or not". Cela échouera probablement spécialement si sur le script vous recherchez des objets. \resource spécifique à un profil d'utilisateur lorsque la tâche a été créée, car la session powershell aura besoin de ces informations pour démarrer, sinon elle démarrera et se terminera immédiatement. Par exemple, pour définir $Path lors de l'exécution de script comme "Run whether user is logged on or not" et je spécifie un lecteur mappé. Il chercherait ce lecteur lorsque la tâche démarre, mais puisque le compte utilisateur validé pour exécuter la tâche n'est pas connecté et sur le script, vous faites référence à une source. \object qu'elle doit travailler contre elle n'est pas présente la tâche se terminera simplement. lecteur mappé ( \server\share ) x:\ vs. chemin UNC réel \server\share
  4. Revoyez vos étapes, script, arguments. Parfois, le plus petit morceau peut faire une grande différence même si vous avez fait ce processus plusieurs fois. J'ai manqué plusieurs fois un caractère lors de la saisie du mot de passe ou un point-virgule parfois lors de la construction du script ou de la tâche.

Vérifiez le lien fourni et j'espère que vous ou quelqu'un d'autre pourra bénéficier de cette information. Soyez prudent.

https://technet.microsoft.com/en-us/library/cc722152.aspx

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X