Vi har redan lärt oss mycket om PowerShell. Förra gången vi arbetade med WMI: PowerShell för nybörjare (Del 9): hämta allt från Windows med PowerShell och WMI nu är det enligt min mening den bästa tiden att fokusera på ämnet ”filtrering med PowerShell”. Men först, låt oss titta på övningen från den sista delen.
alla delar av serien finns här: PowerShell för nybörjare (serie)
recension (del 9)
här är tilldelningen och lösningen från del 9:
hämta information om din hårddisk. Använd Get-WmiObject eller Get-CimInstance. Sök först efter WMI-objektet och när du har hittat det visar du namnet, partitionerna, modellen, Firmware och serienumret.
först måste vi ta reda på WMI-instansnamnet. Eftersom uppgiften hänvisar till hårddisken kan vi till exempel söka efter *disk*.
Get-WmiObject *disk* -List
Win32_DiskDrive låter bra. Kom ihåg tvåstegsmetoden från Del 8 för att få ut mer av PowerShell:
Get-CimInstance win32_diskdrive | Get-Member
där hittar du lämpliga attribut. Använd nu Select-Object för att få dem alla.
Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
Review
WMI (Windows Management Instruments) ger läs-och skrivåtkomst till nästan alla Windows-inställningar. Det finns två viktiga cmdlets: Get-WmiObject och Get-CimInstance.
varför filtrering?
filtrering är en nyckelteknik i PowerShell. När du väl vet hur du filtrerar får du mer ut av PowerShell.
Tja, min uppgift för denna del är att förklara varför filtrering är viktigt. Ok låt oss säga att du har mer än en hårddisk. Utgången ovan visar alla hårddiskar. Men du vill bara visa Samsung-hårddiskar, till exempel.
varför skulle du vilja göra detta? Kanske frågar din chef hur många Samsung-skivor som används. På alla datorer. Kom ihåg att WMI och PowerShell gör att du kan göra fjärrfrågor. Ok tillbaka till ämnet. Vi vill bara ha Samsung SSD med 500 GB. Titta på filterparametern!
Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
Följande är lite ovanligt och för mer avancerade PowerShell-nördar, men varför inte? Följande kommando får alla Samsung SSD från alla domändatorer, men inte från servrar.
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
om dina kollegor tror att du står inför ett olösligt problem, tryck bara på knapparna och visa dem vad du kan göra. occupy
Ok, låt oss gå till exemplen för nybörjare.
filtrera objekt
kommer du ihåg kommandot Get-ChildItem? Jag har använt det här kommandot mycket ofta i den här serien.
Om du kör Get-Help Get-ChildItem hittar du många filtreringsexempel i hjälpen.
Get-Help Get-ChildItem -Online
Jag föredrar att använda den lokala hjälpen.
Get-Help Get-ChildItem -Examples
vad har vi lärt oss hittills?
filtrering är en nyckelteknik i PowerShell. När du förstår hur du filtrerar får du mer ut av PowerShell.
filtrera Active Directory-objekt
Om du är en IT-Pro arbetar du förmodligen i en Active Directory-miljö. Filtrering är en nyckelteknik när du arbetar med Active Directory-objekt.
följande kommando använder filterparametern för att få alla användare som är inaktiverade:
Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name
Du kanske undrar hur jag känner till attributnamnen? Kom ihåg 2-stegsmetoden för att få ut mer av objekt: 1. använd Get-medlem 2. använd Välj-objekt.
Filterparametern
Låt oss ta en titt runt. Vilka kommandon använder filterparametern? Observera att jag är på en domänkontrollant.
Get-Command -ParameterName Filter
som du kan se används filterparametern mest i Active Directory-kommandon. Och jag måste erkänna att jag alltid har använt filterparametern endast för Active Directory. Det är så det är. Så låt oss koncentrera oss på Active Directory. Säg att vi vill ha alla Domändatorer (serveroperativsystem och klientoperativsystem) sorterade efter operativsystem. För detta måste vi använda filterparametern med *.
Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem
När det gäller filtrering var detta en enkel uppgift.
Filtreringsmetoden
nu försöker vi få alla datorer som har Windows 10 installerat. För detta måste vi sätta filterparametern i böjda parenteser.
Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}
det är dags att bryta ner detaljerna.
konsolerna
placera filtret i böjda konsoler.
attributen
nästa ta reda på egenskaperna (attribut) namn. Vi har redan diskuterat det i PowerShell för nybörjare (Del 8): PowerShell – kraften-komma i kontakt med objekt (Get-Member, Select-Object). Kom ihåg tvåstegsmetoden!
Get-ADComputer client01 -Properties * | Get-Member
sidoanteckning: notera parametern egenskaper. I Active Directory visas inte alla egenskaper som standard.
operatörerna
nästa använder en operatör.
en operatör kan vara-like, -as, -equal, – ne och så vidare … för mer information om parametrar typ
help about_operators
detta öppnar en textfil som lagras på din dator.
uttalandet
om vi vill filtrera något behöver vi ett villkor. Detta villkor måste placeras i citattecken.
granska
Om du arbetar med filter, se hjälpavsnittet först. Filter placeras vanligtvis inom parentes. Ofta används en operatör också.
några fler Filterexempel … utan mycket prat …
söker efter användare som har ett dåligt lösenordsantal på 0. Här är ett exempel på Petras konto:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
söker efter användare som har ett dåligt lösenordsantal på 0 och är aktiverade. (Du ser att Petra inte är aktiverat).
Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name
Visa alla Windows Server-Domändatorer, men bara de som kör Windows Server 2016 och vars namn börjar med DC.
Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}
men ibland måste vi hitta ett annat sätt. Nämligen när ingen filtrering är tillgänglig. Sedan använder vi var-objekt.
filtrering med Where-Object
Where-Object finns alltid på höger sida av röret. Filtrering till vänster. Vad det betyder, för-och nackdelar i slutet av inlägget. För denna del kommer vi att koncentrera oss på var-objekt.
Här är några exempel från PowerShell-hjälpen.
Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}
Jag skulle dock vilja använda ett exempel från ett av mina bidrag.
Get-Hotfix | Where-Object HotfixID -like KB31*
Var uppmärksam på snabbkorrigering. Det hänvisar till ett attribut.
den rekommenderade proceduren (på grund av bakåtkompatibiliteten) ser ut så här:
Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}
det finns något nytt nu. Vad betyder$_?
$_ är en variabel som itererar över varje objekt / element som skickas från föregående (rör). Enkelt uttryckt: ta snabbkorrigeringen från varje objekt som kommer från röret.
filtrering vs. Where-Object
om Inget filter är tillgängligt, använd Where-Object. Om du har möjlighet att använda ett filter på vänster sida av röret använda den! Varför? Tja, det är en skillnad om du skickar 1000 objekt över röret eller bara 500, i fallet med var-objekt måste alla objekt passera genom röret och först då filtreras de. Kom ihåg röret från Del 7: PowerShell för nybörjare (Del 7): röret (och många exempel att leka med)
Review
där-objektet alltid finns på höger sida av röret. Filtrering till vänster. Om du har valet mellan ett filter på vänster sida av röret eller var-objekt på höger sida, välj sedan vänster sida.
övning
här är övningen till nästa del.
Where-Object:
använd Get-Service och Where-Object för att visa endast tjänster som körs.
Filter (Active Directory krävs):
använd filterparametern för att få alla användare som är inaktiverade.
Vi ses nästa gång på ämnet: PowerShell för nybörjare (Del 11): ha kul med PowerShell-enheter
Patrick Gruenauer, MVP PowerShell