PowerShell för nybörjare (Del 10): filtrering och var-objekt

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

Unbenannt.PNG

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

Unbenannt.PNG

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.

Unbenannt.PNG

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

Unbenannt.PNG

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

Unbenannt.PNG

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

Unbenannt.PNG

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.

Unbenannt.PNG

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

Unbenannt.PNG

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.

Unbenannt.PNG

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!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

Unbenannt.PNG

sidoanteckning: notera parametern egenskaper. I Active Directory visas inte alla egenskaper som standard.

operatörerna

nästa använder en operatör.

Unbenannt.PNG

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.

Unbenannt.PNG

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:

Unbenannt.PNG

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

Unbenannt.PNG

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

Unbenannt.PNG

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*')}

Unbenannt.PNG

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*

Unbenannt.PNG

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*'}

Unbenannt.PNG

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

Lämna ett svar

Din e-postadress kommer inte publiceras.