Geek School: Apprenez à utiliser des emplois dans PowerShell

Table des matières:

Geek School: Apprenez à utiliser des emplois dans PowerShell
Geek School: Apprenez à utiliser des emplois dans PowerShell

Vidéo: Geek School: Apprenez à utiliser des emplois dans PowerShell

Vidéo: Geek School: Apprenez à utiliser des emplois dans PowerShell
Vidéo: 5 MEILLEURS Projets Raspberry Pi !! GENIAUX !! Home Assistant, OSMC, RecalBox, AdGuard, NextCloud - YouTube 2024, Mars
Anonim
PowerShell comporte quatre types de travaux: les travaux en arrière-plan, les travaux à distance, les travaux WMI et les travaux planifiés. Rejoignez-nous pour découvrir ce qu’ils sont et comment nous pouvons les utiliser.
PowerShell comporte quatre types de travaux: les travaux en arrière-plan, les travaux à distance, les travaux WMI et les travaux planifiés. Rejoignez-nous pour découvrir ce qu’ils sont et comment nous pouvons les utiliser.

Assurez-vous de lire les articles précédents de la série:

  • Apprenez à automatiser Windows avec PowerShell
  • Apprendre à utiliser les cmdlets dans PowerShell
  • Apprendre à utiliser des objets dans PowerShell
  • Apprentissage du formatage, du filtrage et de la comparaison dans PowerShell
  • Apprendre à utiliser la communication à distance dans PowerShell
  • Utilisation de PowerShell pour obtenir des informations sur l'ordinateur
  • Utilisation de collections dans PowerShell

Et restez à l’écoute pour le reste de la série toute la semaine.

Travaux en arrière-plan

Jusqu’à présent, tout ce que je vous ai montré dans PowerShell était synchrone, c’est-à-dire que nous tapons quelque chose dans le shell et que nous ne pouvons pas vraiment en faire beaucoup tant que cette commande n’est pas terminée. C’est là que les tâches d’arrière-plan entrent en jeu. Pour créer une tâche d’arrière-plan, transmettez simplement un bloc de script à la cmdlet Start-Job.

Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}

Maintenant, nous sommes libres de faire ce que nous voulons dans le shell pendant que ce bloc de script s'exécute en arrière-plan.
Maintenant, nous sommes libres de faire ce que nous voulons dans le shell pendant que ce bloc de script s'exécute en arrière-plan.
Lorsque vous lancez un nouveau travail, PowerShell crée un nouvel objet de travail qui représente ce travail. Vous pouvez obtenir la liste de tous les travaux à tout moment en exécutant l'applet de commande Get-Job.
Lorsque vous lancez un nouveau travail, PowerShell crée un nouvel objet de travail qui représente ce travail. Vous pouvez obtenir la liste de tous les travaux à tout moment en exécutant l'applet de commande Get-Job.
Les objets de travail vous renseignent sur l'état des travaux. Par exemple, dans la capture d'écran ci-dessus, nous pouvons voir que nous avons un BackgroundJob appelé GetFileList qui est toujours en cours d'exécution, mais a déjà commencé à renvoyer des données. Si, à un moment quelconque, vous décidez que le travail est en cours d'exécution depuis trop longtemps, vous pouvez facilement l'arrêter en le connectant à Stop-Job.
Les objets de travail vous renseignent sur l'état des travaux. Par exemple, dans la capture d'écran ci-dessus, nous pouvons voir que nous avons un BackgroundJob appelé GetFileList qui est toujours en cours d'exécution, mais a déjà commencé à renvoyer des données. Si, à un moment quelconque, vous décidez que le travail est en cours d'exécution depuis trop longtemps, vous pouvez facilement l'arrêter en le connectant à Stop-Job.

Get-Job –Name GetFileList | Stop-Job

Image
Image

Cependant, une fois que vous avez arrêté un travail, les données qu'il a reçues jusqu'au moment de son arrêt sont toujours disponibles. Il y a un truc, cependant. Dans PowerShell, une fois que vous recevez les résultats d'un travail, ils sont supprimés. Pour qu'ils restent, vous devez spécifier le paramètre keep switch de Receive – Job.

Get-Job –Name GetFileList | Receive-Job –Keep

Une fois que vous avez terminé votre travail, il est préférable de le supprimer. Pour supprimer le travail, dirigez-le simplement vers l'applet de commande Remove-Job.
Une fois que vous avez terminé votre travail, il est préférable de le supprimer. Pour supprimer le travail, dirigez-le simplement vers l'applet de commande Remove-Job.

Get-Job –Name GetFileList | Remove-Job

Cela le supprimera de la liste des travaux renvoyés par Get-Job.

Image
Image

Travaux à distance

Il y a quelques leçons, nous avons vu comment utiliser la communication à distance pour exécuter des commandes PowerShell sur une machine distante à l'aide de Invoke-Command, mais saviez-vous que vous pouvez également utiliser Invoke-Command pour lancer un travail de communication à distance en arrière-plan? Pour ce faire, ajoutez simplement le paramètre –AsJob à la fin de votre commande:

Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob

C’était une commande simple qui aurait déjà dû être exécutée. Voyons donc le statut de nos travaux.
C’était une commande simple qui aurait déjà dû être exécutée. Voyons donc le statut de nos travaux.
Hmm, on dirait que ça a échoué. Cela m'amène à mon premier casse-tête avec des emplois. Lorsque vous créez un nouveau travail de n'importe quel type dans PowerShell, il crée un travail parent en plus d'un travail enfant pour chaque ordinateur sur lequel vous l'exécutez. Lorsque vous utilisez la cmdlet Get-Job, elle vous indique uniquement les travaux parent et la propriété state est le pire des cas. En d'autres termes, même si la commande ne peut pas s'exécuter sur un ordinateur sur cent, l'état des travaux parent indiquera échoué. Pour voir une liste des travaux enfants, vous devez utiliser le paramètre IncludeChildJob.
Hmm, on dirait que ça a échoué. Cela m'amène à mon premier casse-tête avec des emplois. Lorsque vous créez un nouveau travail de n'importe quel type dans PowerShell, il crée un travail parent en plus d'un travail enfant pour chaque ordinateur sur lequel vous l'exécutez. Lorsque vous utilisez la cmdlet Get-Job, elle vous indique uniquement les travaux parent et la propriété state est le pire des cas. En d'autres termes, même si la commande ne peut pas s'exécuter sur un ordinateur sur cent, l'état des travaux parent indiquera échoué. Pour voir une liste des travaux enfants, vous devez utiliser le paramètre IncludeChildJob.
Image
Image

Si vous regardez de plus près, vous verrez que le travail n'a en effet échoué que sur un ordinateur, ce qui nous amène au prochain. Lorsque vous essayez d'obtenir les résultats du travail, si vous spécifiez le nom ou l'ID du travail du parent, PowerShell renverra les données de tous les travaux enfants. Le problème est que s'il y avait une erreur dans l'un des jobs enfants, il nous restera du texte rouge.

Il y a deux façons de contourner cela. Tout d'abord, si vous connaissez les ordinateurs pour lesquels vous souhaitez obtenir les résultats, vous pouvez simplement utiliser le paramètre ComputerName de la cmdlet Recieve –Job.
Il y a deux façons de contourner cela. Tout d'abord, si vous connaissez les ordinateurs pour lesquels vous souhaitez obtenir les résultats, vous pouvez simplement utiliser le paramètre ComputerName de la cmdlet Recieve –Job.

Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

Vous pouvez également obtenir les résultats d'un travail enfant spécifique à l'aide de son ID de travail.
Vous pouvez également obtenir les résultats d'un travail enfant spécifique à l'aide de son ID de travail.

Get-Job -Id 3 –IncludeChildJob

Image
Image

Get-Job -Id 5 | Receive-Job –Keep

Image
Image

Emplois WMI

Les tâches WMI sont très similaires aux tâches distantes, nécessitant l'ajout du paramètre –AsJob à la cmdlet Get-WmiObject.

Image
Image
Malheureusement, cela signifie qu'ils sont également soumis aux mêmes pièges que ceux mentionnés dans la section Travaux à distance.
Malheureusement, cela signifie qu'ils sont également soumis aux mêmes pièges que ceux mentionnés dans la section Travaux à distance.

Travaux planifiés

Les trois derniers types de travaux que nous avons examinés n'étaient pas persistants, ce qui signifie qu'ils ne sont disponibles que dans votre session actuelle. En gros, cela signifie que si vous lancez un travail, puis ouvrez une autre console PowerShell et exécutez Get-Job, vous ne verrez aucun travail. Cependant, revenez à la console à partir de laquelle le travail a été lancé, vous pourrez voir son statut. Cela contraste avec les tâches planifiées qui sont persistants. Fondamentalement, un travail planifié est un bloc de script qui s'exécute sur une planification. Par le passé, le planificateur de tâches de Windows aurait eu le même effet, ce qui est en réalité ce qui se passe sous le capot. Pour créer un nouveau travail planifié, procédez comme suit:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

Il y a beaucoup de choses dans ce commandement, alors décomposons-les.

  • Premièrement, nous attribuons à notre travail planifié le nom de GetEventLogs.
  • Nous lui indiquons ensuite que, une fois déclenché, nous voulons qu’il exécute le contenu du bloc de script spécifié, qui obtient en gros les 100 dernières entrées du journal des événements de sécurité.
  • Ensuite, nous spécifions un déclencheur. Comme le paramètre trigger utilise un objet trigger en entrée, nous avons utilisé une commande entre parenthèses pour générer un trigger qui sera déclenché tous les jours à 17 heures.
  • Comme nous traitons du journal des événements, nous devons l'exécuter en tant qu'administrateur, ce que nous pouvons spécifier en créant un nouvel objet ScheduledJobOption et en le transmettant au paramètre ScheduledJobOption.
Comme il s'agit d'un type de travail légèrement différent, vous devrez également utiliser une commande différente pour récupérer une liste de tous les travaux planifiés sur un ordinateur.
Comme il s'agit d'un type de travail légèrement différent, vous devrez également utiliser une commande différente pour récupérer une liste de tous les travaux planifiés sur un ordinateur.

Get-ScheduledJob

Conseillé: