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
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 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.
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.