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
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
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.
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
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
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
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.
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
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.
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!
Get-ADComputer client01 -Properties * | Get-Member
Side Note: noteer de eigenschappen parameter. In Active Directory worden niet alle eigenschappen standaard weergegeven.
de operators
gebruiken vervolgens een operator.
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.
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:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
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
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*')}
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*
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*'}
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