PowerShell voor Beginners (Deel 10): Filtering en Where-Object

we hebben al veel geleerd over PowerShell. De laatste keer dat we werkten met WMI: PowerShell voor Beginners (Deel 9): haal het allemaal uit Windows met PowerShell en WMI nu, naar mijn mening, is het de beste tijd om zich te concentreren op het onderwerp “filteren met PowerShell”. Maar eerst, laten we eens kijken naar de oefening van het laatste deel.

alle delen van de serie zijn hier te vinden: PowerShell voor Beginners (Series)

recensie (deel 9)

Hier is de toewijzing en de oplossing uit deel 9:

informatie over uw harde schijf ophalen. Gebruik Get-WmiObject of Get-CimInstance. Zoek eerst naar het WMI Object en als je het gevonden hebt, toon je de naam, de partities, het Model, de Firmware en het serienummer.

eerst moeten we de naam van de WMI-instantie achterhalen. Aangezien de taak verwijst naar de harde schijf, kunnen we zoeken naar *disk*, bijvoorbeeld.

Get-WmiObject *disk* -List

Unbenannt.PNG

Win32_DiskDrive klinkt goed. Onthoud de twee stappen methode uit Deel 8 om meer uit PowerShell te halen:

Get-CimInstance win32_diskdrive | Get-Member

daar vindt u de juiste attributen. Gebruik nu Select-Object om ze allemaal te krijgen.

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

Unbenannt.PNG

Review

WMI (Windows Management Instruments) biedt Lees-en schrijftoegang tot bijna alle Windows-instellingen. Er zijn twee belangrijke cmdlets: Get-WmiObject en Get-CimInstance.

waarom filteren?

filteren is een belangrijke technologie in PowerShell. Als je eenmaal weet hoe je moet filteren, krijg je meer uit PowerShell.

mijn taak voor dit deel is om uit te leggen waarom filteren belangrijk is. Ok laten we zeggen dat je meer dan één harddisk hebt. De uitvoer hierboven toont u alle harde schijven. Maar u wilt alleen Samsung harde schijven weer te geven, bijvoorbeeld.

Unbenannt.PNG

waarom zou u dit willen doen? Misschien vraagt je baas je hoeveel Samsung-schijven in gebruik zijn. Op alle computers. Vergeet niet dat WMI en PowerShell u in staat stellen om externe query ‘ s uit te voeren. Terug naar onderwerp. We willen alleen de Samsung SSD met 500 GB. Bekijk de filterparameter!

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

Unbenannt.PNG

het volgende is een beetje ongewoon en voor meer geavanceerde PowerShell nerds, maar waarom niet? Het volgende commando krijgt alle Samsung SSD ‘ s van alle Domeincomputers, maar niet van servers.

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

als uw collega ‘ s denken dat u met een onoplosbaar probleem wordt geconfronteerd, druk dan op de knoppen en laat ze zien wat u kunt doen. 😉

Ok, laten we naar de voorbeelden voor beginners gaan.

filtering van objecten

herinnert u zich de opdracht Get-ChildItem? Ik heb dit commando heel vaak gebruikt in deze serie.

Als u Get-Help Get-ChildItem uitvoert, vindt u veel filtervoorbeelden in de help.

Get-Help Get-ChildItem -Online

Ik gebruik liever de lokale help.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

wat hebben we tot nu toe geleerd?

filteren is een belangrijke technologie in PowerShell. Als je eenmaal begrijpt hoe te filteren, krijg je meer uit PowerShell.

Active Directory-objecten filteren

Als u een IT-Pro bent, werkt u waarschijnlijk in een Active Directory-omgeving. Filteren is een belangrijke techniek bij het werken met Active Directory-objecten.

het volgende commando gebruikt de Filterparameter om alle gebruikers te krijgen die uitgeschakeld zijn:

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

Unbenannt.PNG

u vraagt zich misschien af hoe ik de attribuutnamen ken? Onthoud de 2-staps methode om meer uit objecten te halen: 1. gebruik Get-Member 2. gebruik Select-Object.

Unbenannt.PNG

de Filterparameter

laten we eens rondkijken. Welke commando ‘ s gebruiken de filterparameter? Merk op dat ik op een domeincontroller zit.

Get-Command -ParameterName Filter

zoals u kunt zien wordt de filterparameter meestal gebruikt in Active Directory-opdrachten. En ik moet toegeven dat ik altijd de filterparameter alleen voor Active Directory heb gebruikt. Zo is het nu eenmaal. Laten we ons concentreren op Active Directory. Stel dat we alle Domeincomputers (Server-besturingssysteem en Client-besturingssysteem) willen Sorteren op Besturingssysteem. Hiervoor moeten we de filterparameter met *gebruiken.

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

Unbenannt.PNG

in termen van filteren was dit een eenvoudige taak.

de filtermethode

nu proberen we alle computers te krijgen waarop Windows 10 is geïnstalleerd. Hiervoor moeten we de filterparameter in gebogen beugels zetten.

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

Het is tijd om de details op te splitsen.

de haakjes

zetten het filter in gebogen haakjes.

Unbenannt.PNG

de attributen

Zoek vervolgens de naam eigenschappen (attributen) op. We hebben het al besproken in PowerShell voor Beginners (Deel 8): De kracht van PowerShell – in contact komen met objecten (Get-Member, Select-Object). Denk aan de twee stappen methode!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

Side Note: noteer de eigenschappen parameter. In Active Directory worden niet alle eigenschappen standaard weergegeven.

de operators

gebruiken vervolgens een operator.

Unbenannt.PNG

een operator kan-like, -as, -equal, -ne enzovoort zijn … voor meer informatie over parameters typ

help about_operators

Dit opent een tekstbestand dat op uw computer is opgeslagen.

het statement

als we iets willen filteren, hebben we een voorwaarde nodig. Deze voorwaarde moet tussen aanhalingstekens worden geplaatst.

Unbenannt.PNG

bekijk

Als u met filters werkt, raadpleeg dan eerst de Help-sectie. Filters worden meestal tussen haakjes geplaatst. Vaak wordt ook een operator gebruikt.

wat meer Filtervoorbeelden … zonder veel te praten …

zoeken naar gebruikers met een slecht aantal wachtwoorden van 0. Hier is een voorbeeld van Petra ’s account:

Unbenannt.PNG

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

Unbenannt.PNG

zoeken naar gebruikers met een slecht aantal wachtwoorden van 0 en zijn ingeschakeld. (Je zult zien dat Petra niet is ingeschakeld).

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

Unbenannt.PNG

Toon alle Windows Server-Domeincomputers, maar alleen die waarop Windows Server 2016 wordt uitgevoerd en waarvan de namen beginnen met DC.

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

Unbenannt.PNG

maar soms moeten we een andere manier vinden. Namelijk wanneer er geen filtering beschikbaar is. Dan gebruiken we Where-Object.

filteren met Where-Object

Where-Object is altijd aan de rechterkant van de pijp. Het filtert aan de linkerkant. Wat dat betekent, de voors en tegens aan het einde van de post. Voor dit deel zullen we ons concentreren op waar-Object.

Hier zijn enkele voorbeelden uit de PowerShell help.

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

Ik wil echter graag een voorbeeld van een van mijn bijdragen gebruiken.

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

Unbenannt.PNG

let op HotFixID. Het verwijst naar een attribuut.

De aanbevolen procedure (vanwege de achterwaartse compatibiliteit) ziet er als volgt uit:

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

Unbenannt.PNG

Er is nu iets nieuws. Wat betekent$?

$_ is een variabele die itereert over elk object / element dat is doorgegeven van de vorige (pipe). Simpel gezegd: neem de hotfixID van elk object dat uit de pijp komt.

Filtering vs. Where-Object

als er geen filter beschikbaar is, gebruik Where-Object. Als je in staat bent om een filter aan de linkerkant van de pijp te gebruiken gebruik het! Waarom? Nou, het is een verschil of je 1000 objecten over de pijp of slechts 500, in het geval van waar-Object alle objecten moeten passeren door de pijp en alleen dan worden ze gefilterd. Denk aan de pipe uit Deel 7: PowerShell voor Beginners (Deel 7): De Pipe (en vele voorbeelden om mee te spelen)

Review

waarbij-Object altijd aan de rechterkant van de pipe staat. Het filtert aan de linkerkant. Als u de keuze hebt tussen een filter aan de linkerkant van de pijp of waar-Object aan de rechterkant, kies dan de linkerkant.

oefening

Hier is de oefening tot het volgende deel.

Where-Object:

gebruik Get-Service en Where-Object om alleen services te tonen die draaien.

Filter (Active Directory vereist):

Gebruik de filterparameter om alle gebruikers te verkrijgen die zijn uitgeschakeld.

tot de volgende keer bij het onderwerp: PowerShell voor Beginners (Deel 11): plezier hebben met PowerShell Drives

Patrick Gruenauer, MVP PowerShell

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.