dans PowerShell, j’exécute souvent des commandes qui renvoient des tableaux que je dois filtrer. Une fois que j’ai filtré l’objet que je recherche, je dois lire une propriété de cet objet. Il ya quelques façons de le faire. Voici trois.
Ce sont également de bons exemples si vous êtes nouveau sur PowerShell et essayez de passer de L’état D’esprit Linux d’analyse des chaînes à L’état D’esprit PowerShell de manipulation des objets.,
Pour ces exemples, nous allons utiliser un tableau filtré à partir de Get-Process
:
Select-Object
lit les propriétés des objets. Nous pouvons canaliser l’objet que nous avons trouvé:
Get-Process | Where-Object ProcessName -Match "update" | Select-Object cpu CPU ---380.761615
dans ce cas, Where-Object
renvoie un objet et Select-Object
lit la propriété hors de celui-ci, mais cela fonctionne toujours si nous associons plusieurs processus. Ensuite, Where-Object
renvoie un tableau qui est décompressé par le pipeline de PowerShell et envoyé à Select-Object
un à la fois.,
il s’agit essentiellement d’un filtre de propriété. Il renvoie toujours un tableau d’objets de processus, mais ces objets n’ont que la propriété que vous avez sélectionnée. Nous pouvons le voir avec Get-Member
:
quatre méthodes, mais une seule propriété.
Méthode 2: sous-expression
Si nous capturons la sortie de notre commande match dans une sous-expression, Nous pouvons accéder aux propriétés de l’objet en utilisant la notation pointillée comme nous le ferions avec n’importe quelle variable:
$(Get-Process | Where-Object ProcessName -Match "update").cpu380.761615
cela fonctionne également si notre correspondance, La sous-expression contiendra un tableau et PowerShell obtiendra automatiquement la propriété cpu de chaque objet de ce tableau.
contrairement au filtre deSelect-Object
, cela ne renvoie pas d’objets de processus avec une propriété cpu. Au lieu de cela, il renvoie un double (nombre) avec la valeur réelle:
Méthode 3: Boucle
Comme toute sortie, nous pouvons canaliser notre correspondance dans une boucle ForEach-Object
et utiliser la variable $_
pour accéder aux propriétés de chaque élément que la boucle voit:
Get-Process | Where-Object ProcessName -Match "update" | ForEach-Object {$_.cpu}381.625785
la boucle fonctionnera bien sûr sur plusieurs objets.,
tout comme la sous-expression, cela renvoie la valeur réelle au lieu d’un objet avec une propriété.
bonne automatisation!
Adam
Besoin de plus de cet article? Je suis disponible pour consulter.
Vous pouvez également consulter ces articles connexes:
- Comment utiliser Out-String dans PowerShell: ne pas
- Script DSC PowerShell Sans Tête
- module D’installation PowerShell: utilisez Install-Package à la place