web-dev-qa-db-fra.com

La commande Get-ScheduledTask ne fonctionne pas dans Windows Server 2008 R2

J'essaie de trouver une tâche planifiée avec un certain modèle dans son nom, dans mon cas, la tâche planifiée devrait avoir ce modèle "ServiceNow" dans son nom. Pour cela, j'utilise Get-ScheduledTask, mais cette commande échoue dans Windows Server 2008 R2.

$taskPattern = "ServiceNow"
$taskDetails = Get-ScheduledTask | Where-Object {$_.TaskName -match $taskPattern  }
$taskName = $taskDetails.TaskName

Ce script échoue avec une erreur:

"Get-ScheduledTask: le terme" Get-ScheduledTask "n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme exécutable. Vérifiez l'orthographe du nom ou, si un chemin a été inclus, vérifiez que le chemin est corriger et réessayer. "

J'ai ensuite essayé cette approche qui me donne le "(nom de la tâche Date & Time State)" mais je ne sais pas comment extraire le nom de la tâche de sa sortie.

$taskPattern = "ServiceNow" 
$taskExists = schtasks /query | select-string -patt $taskPattern 
$taskExists

Quelqu'un peut-il me dire comment le faire fonctionner dans Windows Server 2008 R2 en extrayant uniquement le nom de tâche réel? Merci d'avance

5
beginner

Vous ne pouvez pas obtenir Get-ScheduledTask sous Windows 2008 R2 tel qu'il a été introduit pour Windows 2012 et personne ne l'a rétroporté. Pour plus d'informations, consultez le lien sur github .

Le commentaire qui décrit le mieux la situation est:

Salut @dronkoff - Ce module est pris en charge sur PS 4.0. Cependant, le problème n'est pas dans la version de PowerShell. Le problème est que le module ScheduledTasks, dont dépend cette ressource, n'est pas intégré à Windows Server 2008R2. Il a d'abord été inclus dans Windows Server 2012.

C'est le cas avec de nombreux modules PowerShell: ils sont absents des anciennes versions de Windows (mise en réseau par exemple). Dans l'occasion étrange, il est facile de contourner le problème. Cependant, dans ce cas, la conversion de la ressource pour utiliser schtasks.exe n'est pas possible sans une réécriture complète et entraînerait probablement quelque chose de vraiment instable et bogué (sans parler des problèmes qui pourraient survenir avec différentes versions localisées de schtasks). Je ne peux vraiment pas voir cela se produire malheureusement (à moins que quelqu'un d'autre de la communauté ait des idées sur la façon de le faire).

Mais vous avez raison, il convient de mentionner que Windows Server 2008R2 n'est pas actuellement pris en charge.

La solution

La solution consiste à utiliser schtask avec les bons commutateurs.

Si vous l'avez dans le dossier Microsoft comme je l'ai dans l'exemple que vous avez juste besoin d'exécuter:

schtasks /tn \Microsoft\ServiceNow /query /fo LIST

Le résultat:

Folder: \Microsoft
HostName:      XXXXXACL06
TaskName:      \Microsoft\ServiceNow
Next Run Time: 7/4/2018 8:16:22 AM
Status:        Ready
Logon Mode:    Interactive only

Si vous souhaitez plus de détails, vous pouvez utiliser le /v (verbeux) commutateur:

schtasks /tn \Microsoft\ServiceNow /query /v > service_now_details.txt

Modifier - pour trouver un motif

Si vous n'avez qu'un modèle à rechercher, vous devez utiliser un outil supplémentaire pour rechercher la chaîne. Les fenêtres prennent en charge nativement findstr (ou Select-String (short sls) en PowerShell):

Pour trouver le nom de la tâche, vous pouvez alors utiliser:

schtasks /query /fo LIST | findstr "ServiceNow"

OU même avec une charte sauvage

schtasks /query /fo LIST | findstr "ServiceNo*"

OU la manière powershell:

schtasks /query /fo LIST | sls 'ServiceNo*'

La sortie dans tous les cas sera quelque chose comme ça (puisque ma tâche est nommée exactement ServiceNow):

TaskName: \Microsoft\ServiceNow

Édition2 sensibilité à la casse

Si vous recherchez une chaîne insensible à la casse, alors: pour findstr vous devez ajouter /I pour le rendre insensible. Le Powershell select-string (sls) est naturellement insensible.

12
tukan

Il y a un excellent script dans la galerie MS Script, Get-ScheduledTasks (notez le S à la fin du nom du service). Cela fonctionne sur les anciennes versions de Windows remontant à Windows Server 2003/Windows XP.

Merci à l'incroyable Warren F (alias Rambling Cookie Monster) pour avoir créé et partagé cela.

0
JohnLBevan