Geek School: Travailler avec des collections dans PowerShell

Table des matières:

Geek School: Travailler avec des collections dans PowerShell
Geek School: Travailler avec des collections dans PowerShell

Vidéo: Geek School: Travailler avec des collections dans PowerShell

Vidéo: Geek School: Travailler avec des collections dans PowerShell
Vidéo: PREMIERS TESTS du Google PIXEL 7A ! Toujours les boss ? (Meh) - YouTube 2024, Avril
Anonim
Etant donné que PowerShell est basé sur le.Net Framework et intègre diverses autres technologies telles que WMI et CIM, il existe toujours plus d’un moyen de réaliser la même chose. Rejoignez-nous pour ce court article où nous apprenons à choisir la meilleure méthode pour accomplir nos tâches.
Etant donné que PowerShell est basé sur le.Net Framework et intègre diverses autres technologies telles que WMI et CIM, il existe toujours plus d’un moyen de réaliser la même chose. Rejoignez-nous pour ce court article où nous apprenons à choisir la meilleure méthode pour accomplir nos tâches.

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

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

Utilisation de cmdlets par lots

Plus tôt dans la série, lorsque nous vous avions présenté le pipeline, nous vous avions montré comment prendre les objets générés par une applet de commande et les transmettre en tant qu'entrée à une autre applet de commande, en procédant comme suit:

Get-Process -Name notepad | Stop-Process

Cela tuerait tout processus portant le nom de «bloc-notes». Mais vous vous demandez probablement comment PowerShell est capable de tuer toutes les instances du bloc-notes avec une seule commande. La réponse réside dans l'aide de l'applet de commande Stop-Process.

help Stop-Process –Full

Image
Image

Si vous regardez la dernière ligne de code dans la section de syntaxe, vous pouvez voir que le paramètre InputObject accepte un objet de type Process , et chaque fois que vous voyez un type suivi de deux crochets, cela signifie que le paramètre accepte un ou plus du type précédent. Dans ce cas, il accepte un ou plusieurs objets de processus. Techniquement, nous dirions que la cmdlet InputObject accepte un processus. tableau. Chaque fois que vous disposez d'une applet de commande prenant en charge les opérations par lots de cette manière, utilisez-la. C'est le choix numéro un.

Utiliser WMI

Bien que la technologie WMI ne soit pas la meilleure technologie à être livrée à partir du siège de Microsoft, elle figure au deuxième rang de la liste des méthodes de travail avec les collections d’objets. Nous pourrions facilement obtenir une liste des processus en cours d'exécution à partir de la classe Win32_Process comme suit:

Get-WmiObject –Class Win32_Process

Étant donné que la requête WMI renvoie son propre type d'objet, vous devez rechercher une méthode capable d'arrêter le processus. Laissons donc le diriger vers Get-Member.
Étant donné que la requête WMI renvoie son propre type d'objet, vous devez rechercher une méthode capable d'arrêter le processus. Laissons donc le diriger vers Get-Member.

Get-WmiObject –Class Win32_Process | Get-Member

On dirait que la méthode la plus proche à arrêter est la méthode terminate, donc ce doit être celle-là. Pour appeler une méthode sur un objet WMI, il vous suffit de la diriger vers Invoke-WmiMethod et de spécifier le nom de la méthode.
On dirait que la méthode la plus proche à arrêter est la méthode terminate, donc ce doit être celle-là. Pour appeler une méthode sur un objet WMI, il vous suffit de la diriger vers Invoke-WmiMethod et de spécifier le nom de la méthode.

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Génial, ça a fait l'affaire. Chaque fois que vous obtenez une valeur de retour de 0 dans WMI, n'oubliez pas que la commande a été exécutée avec succès.
Génial, ça a fait l'affaire. Chaque fois que vous obtenez une valeur de retour de 0 dans WMI, n'oubliez pas que la commande a été exécutée avec succès.

Énumération

À défaut des deux autres méthodes, si vous devez faire quelque chose à un groupe d'objets, vous pouvez énumérer l'objet entier et agir sur chaque objet individuel. Vous devez d’abord trouver la méthode que vous utiliseriez pour arrêter un processus unique.

Get-Process | Get-Member -MemberType Method

Parfait, il semble que nous puissions utiliser la méthode Kill puis canaliser dans ForEach-Object pour tous les tuer.
Parfait, il semble que nous puissions utiliser la méthode Kill puis canaliser dans ForEach-Object pour tous les tuer.

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

Ici, nous avons pris tous les objets de processus renvoyés par Get-Process et les avons passés à l'applet de commande ForEach-Object. Tout comme la cmdlet Where-Object, nous avons représenté chaque objet du pipeline avec $ sur lequel nous avons pu appeler la méthode Kill (). Cela dit, énumérer une collection est beaucoup plus lent que les méthodes ci-dessus et ne devrait être utilisé que comme dernier résultat.
Ici, nous avons pris tous les objets de processus renvoyés par Get-Process et les avons passés à l'applet de commande ForEach-Object. Tout comme la cmdlet Where-Object, nous avons représenté chaque objet du pipeline avec $ sur lequel nous avons pu appeler la méthode Kill (). Cela dit, énumérer une collection est beaucoup plus lent que les méthodes ci-dessus et ne devrait être utilisé que comme dernier résultat.

Résumé

Premier choix

Get-Process -Name notepad | Stop-Process

Choix deux

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Choix trois

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

C’est tout pour cette fois, à la semaine prochaine pour plus de plaisir avec PowerShell.

Conseillé: