PowerShell pour les débutants (Partie 10): Filtrage et Where-Object

Nous avons déjà beaucoup appris sur PowerShell. La dernière fois que nous avons travaillé avec WMI: PowerShell pour les débutants (Partie 9): Obtenez tout à partir de Windows avec PowerShell et WMI Maintenant, à mon avis, c’est le meilleur moment pour se concentrer sur le sujet « Filtrage avec PowerShell”. Mais d’abord, regardons l’exercice de la dernière partie.

Toutes les parties de la série se trouvent ici: PowerShell pour débutants (Série)

Revue (Partie 9)

Voici le devoir et la solution de la partie 9:

Récupérez des informations sur votre disque dur. Utilisez Get-WmiObject ou Get-CimInstance. Tout d’abord, recherchez l’objet WMI et une fois que vous l’avez trouvé, affichez le Nom, les Partitions, le Modèle, le Firmware et le Numéro de série.

Tout d’abord, nous devons trouver le nom de l’instance WMI. Puisque la tâche fait référence au disque dur, nous pourrions rechercher *disk*, par exemple.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive sonne bien. Rappelez-vous la méthode en deux étapes de la partie 8 pour tirer le meilleur parti de PowerShell:

Get-CimInstance win32_diskdrive | Get-Member

Vous y trouverez les attributs appropriés. Maintenant, utilisez Select-Object pour les obtenir tous.

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Review

WMI (Instruments de gestion Windows) fournit un accès en lecture et en écriture à presque tous les paramètres Windows. Il existe deux applets de commande importantes : Get-WmiObject et Get-CimInstance.

Pourquoi filtrer ?

Le filtrage est une technologie clé dans PowerShell. Une fois que vous savez comment filtrer, vous obtiendrez plus de PowerShell.

Eh bien, ma tâche pour cette partie est d’expliquer pourquoi le filtrage est important. Ok, disons que vous avez plus d’un disque dur. La sortie ci-dessus vous montre tous les disques durs. Mais vous souhaitez afficher uniquement les disques durs Samsung, par exemple.

Unbenannt.PNG

Pourquoi voudriez-vous faire cela? Peut-être que votre patron vous demande combien de disques Samsung sont utilisés. Sur TOUS les ordinateurs. N’oubliez pas que WMI et PowerShell vous permettent de faire des requêtes à distance. Retour au sujet. Nous ne voulons que le SSD Samsung avec 500 Go. Surveillez le paramètre du filtre!

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

Ce qui suit est un peu hors de l’ordinaire et pour les nerds PowerShell plus avancés, mais pourquoi pas? La commande suivante récupère tous les SSD Samsung de tous les ordinateurs du domaine, mais pas des serveurs.

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Si vos collègues pensent que vous rencontrez un problème insoluble, appuyez simplement sur les boutons et montrez-leur ce que vous pouvez faire. Ok

D’accord, passons aux exemples pour les débutants.

Objets filtrants

Vous souvenez-vous de la commande Get-ChildItem ? J’ai utilisé cette commande très souvent dans cette série.

Si vous exécutez Get-Help Get-ChildItem, vous trouverez de nombreux exemples de filtrage dans l’aide.

Get-Help Get-ChildItem -Online

Je préfère utiliser l’aide locale.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

Qu’avons-nous appris jusqu’à présent?

Le filtrage est une technologie clé dans PowerShell. Une fois que vous aurez compris comment filtrer, vous tirerez davantage parti de PowerShell.

Filtrage des objets Active Directory

Si vous êtes un IT-Pro, vous travaillez probablement dans un environnement Active Directory. Le filtrage est une technique clé lorsque vous travaillez avec des objets Active Directory.

La commande suivante utilise le paramètre Filter pour obtenir tous les utilisateurs désactivés :

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt.PNG

Vous vous demandez peut-être comment je connais les noms d’attributs? Rappelez-vous la méthode en 2 étapes pour tirer le meilleur parti des objets: 1. utilisez Get-Member 2. utilisez Select-Object.

Unbenannt.PNG

Le paramètre de filtre

Regardons autour de nous. Quelles commandes utilisent le paramètre filter ? Notez que je suis sur un contrôleur de domaine.

Get-Command -ParameterName Filter

Comme vous pouvez le voir, le paramètre filter est principalement utilisé dans les commandes Active Directory. Et je dois admettre que j’ai toujours utilisé le paramètre de filtre uniquement pour Active Directory. C’est comme ça. Concentrons-nous donc sur Active Directory. Disons que nous voulons que tous les ordinateurs de domaine (système d’exploitation serveur et système d’exploitation client) soient triés par système d’exploitation. Pour cela, nous devons utiliser le paramètre filter avec *.

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

Unbenannt.PNG

En termes de filtrage, c’était une tâche simple.

La méthode de filtrage

Maintenant, nous essayons d’obtenir tous les ordinateurs sur lesquels Windows 10 est installé. Pour cela, nous devons mettre le paramètre de filtre entre parenthèses incurvées.

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

Il est temps de décomposer les détails.

Les supports

Placez le filtre dans des supports incurvés.

Unbenannt.PNG

Les attributs

Découvrez ensuite le nom des propriétés (attributs). Nous en avons déjà discuté dans PowerShell pour les débutants (Partie 8): Le pouvoir de PowerShell – Entrer en contact avec des objets (Get-Member, Select-Object). Rappelez-vous la méthode en deux étapes!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

Note latérale : Notez le paramètre properties. Dans Active Directory, toutes les propriétés ne sont pas affichées par défaut.

Les opérateurs

Utilisent ensuite un opérateur.

Unbenannt.PNG

Un opérateur peut être -like, -as, -equal, -ne et ainsi de suite For Pour en savoir plus sur les paramètres, tapez

help about_operators

Cela ouvre un fichier texte stocké sur votre ordinateur.

L’instruction

Si nous voulons filtrer quelque chose, nous avons besoin d’une condition. Cette condition doit être placée entre guillemets.

Unbenannt.PNG

Avis

Si vous travaillez avec des filtres, consultez d’abord la section d’aide. Les filtres sont généralement placés entre parenthèses. Souvent, un opérateur est également utilisé.

Quelques exemples de filtres supplémentaires without sans trop parler

Recherche d’utilisateurs qui ont un nombre de mots de passe incorrect de 0. Voici un exemple du compte de Petra :

Unbenannt.PNG

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

Unbenannt.PNG

Recherche d’utilisateurs qui ont un nombre de mots de passe incorrect de 0 et qui sont activés. (Vous verrez que Petra n’est pas activée).

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

Unbenannt.PNG

Affiche tous les ordinateurs du domaine Windows Server, mais uniquement ceux qui exécutent Windows Server 2016 et dont le nom commence par DC.

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

Unbenannt.PNG

Mais parfois, nous devons trouver un autre moyen. A savoir lorsqu’aucun filtrage n’est disponible. Ensuite, nous utilisons Where-Object.

Filtrage avec Where-Object

Where-Object est toujours sur le côté droit du tuyau. Filtrage à gauche. Ce que cela signifie, les avantages et les inconvénients à la fin du post. Pour cette partie, nous allons nous concentrer sur Where-Object.

Voici quelques exemples de l’aide PowerShell.

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

Cependant, je voudrais utiliser un exemple d’une de mes contributions.

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

Faites attention à HotFixID. Il fait référence à un attribut.

La procédure recommandée (en raison de la rétrocompatibilité) ressemble à ceci:

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

Unbenannt.PNG

Il y a quelque chose de nouveau maintenant. Que signifie $_ ?

$_ est une variable qui itère sur chaque objet/élément passé du précédent (tuyau). Autrement dit: prenez le hotfixID de chaque objet qui provient du tuyau.

Filtrage par rapport à Where-Object

Si aucun filtre n’est disponible, utilisez Where-Object. Si vous pouvez utiliser un filtre sur le côté gauche du tuyau, utilisez-le! Pourquoi? Eh bien, c’est une différence que vous envoyiez 1000 objets sur le tuyau ou seulement 500, dans le cas où -Object tous les objets doivent traverser le tuyau et ce n’est qu’alors qu’ils sont filtrés. Rappelez-vous le tuyau de la partie 7: PowerShell pour les débutants (Partie 7): Le tuyau (et de nombreux exemples avec lesquels jouer)

Revue

Où-Object est toujours sur le côté droit du tuyau. Filtrage à gauche. Si vous avez le choix entre un filtre sur le côté gauche du tuyau ou Where-Object sur le côté droit, choisissez le côté gauche.

Exercice

Voici l’exercice jusqu’à la prochaine partie.

Where-Object:

Utilisez Get-Service et Where-Object pour afficher uniquement les services en cours d’exécution.

Filtre (Active Directory requis) :

Utilisez le paramètre Filter pour obtenir tous les utilisateurs désactivés.

À la prochaine fois sur le sujet: PowerShell pour les débutants (Partie 11): S’amuser avec les lecteurs PowerShell

Patrick Gruenauer, MVP PowerShell

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.