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
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
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.
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
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
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
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.
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
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.
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!
Get-ADComputer client01 -Properties * | Get-Member
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.
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.
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 :
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
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
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*')}
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*
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*'}
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