Vi har allerede lært mye Om PowerShell. Sist gang vi jobbet MED WMI: PowerShell For Nybegynnere (Del 9): Få alt Fra Windows Med PowerShell Og WMI Nå, etter min mening, er det den beste tiden å fokusere på temaet «Filtrering Med PowerShell». Men først, la oss se på øvelsen fra den siste delen.
alle deler av serien finner du her: PowerShell For Nybegynnere (Serie)
Gjennomgang (Del 9)
her er oppgaven og løsningen fra del 9:
Hent informasjon om harddisken din. Bruk Get-WmiObject eller Get-CimInstance. Søk FØRST ETTER Wmi-Objektet, og når du har funnet det, viser Navnet, Partisjonene, Modellen, Fastvaren og Serienummeret.
Først må vi finne ut navnet PÅ wmi-forekomsten. Siden oppgaven refererer til harddisken, kan vi søke etter * disk*, for eksempel.
Get-WmiObject *disk* -List
Win32_DiskDrive høres bra ut. Husk to-trinns metoden fra del 8 for å få mer ut Av PowerShell:
Get-CimInstance win32_diskdrive | Get-Member
der finner du de riktige attributter. Bruk Nå Select-Object for å få dem alle.
Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
hvorfor filtrering?
Filtrering er en nøkkelteknologi I PowerShell. Når du vet hvordan du filtrerer, får du mer ut Av PowerShell.
Vel, min oppgave for denne delen er å forklare hvorfor filtrering er viktig. Ok la oss si at du har mer enn en harddisk. Utgangen over viser deg alle harddisker. Men du vil bare vise Samsung-harddisker, for eksempel.
Hvorfor vil du gjøre dette? Kanskje sjefen din spør deg hvor Mange Samsung-disker som er i bruk. På alle datamaskiner. Husk AT WMI og PowerShell lar deg gjøre eksterne spørringer. Ok tilbake til emnet. Vi vil bare Ha Samsung SSD med 500 GB. Se på filterparameteren!
Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
følgende er litt utenom det vanlige og for mer avanserte PowerShell nerds, men hvorfor ikke? Følgende kommando får Alle Samsung Ssd-Er fra alle domenedatamaskiner, men ikke fra servere.
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
hvis dine kolleger tror du står overfor et uløselig problem, bare trykk på knappene og vis dem hva du kan gjøre. 😉
Ok, la oss gå til eksemplene for nybegynnere.
Filtreringsobjekter
husker du Kommandoen Get-ChildItem? Jeg har brukt denne kommandoen veldig ofte i denne serien.
hvis Du kjører Get-Help Get-ChildItem finner du mange filtreringseksempler i hjelpen.
Get-Help Get-ChildItem -Online
jeg foretrekker å bruke lokal hjelp.
Get-Help Get-ChildItem -Examples
Hva har vi lært så langt?
Filtrering er en nøkkelteknologi I PowerShell. Når du forstår hvordan du filtrerer, får du mer ut Av PowerShell.
Filtrering Av Active Directory-Objekter
hvis DU ER EN IT-Pro, jobber du sannsynligvis I Et Active Directory-miljø. Filtrering er en viktig teknikk når du arbeider Med Active Directory-Objekter.
følgende kommando bruker Filterparameteren til å hente alle brukere som er deaktivert:
Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name
du lurer kanskje på hvordan jeg kjenner attributtnavnene? Husk 2-trinns metode for å få mer ut av objekter: 1. bruk Get-Member 2. bruk Velg-Objekt.
Filterparameteren
La oss ta en titt rundt. Hvilke kommandoer bruker filterparameteren? Merk at jeg er på en domenekontroller.
Get-Command -ParameterName Filter
som du kan se, brukes filterparameteren mest i Active Directory-kommandoer. Og jeg må innrømme at jeg alltid har brukt filterparameteren bare For Active Directory. Det er slik det er. Så, la oss konsentrere Oss Om Active Directory. Si at vi vil at Alle Domenedatamaskiner (Serveroperativsystem og Klientoperativsystem) sorteres etter operativsystem. For dette må vi bruke filterparameteren med *.
Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem
når det gjelder filtrering, var dette en enkel oppgave.
Filtreringsmetoden
nå prøver Vi å få alle datamaskinene som Har Windows 10 installert. For dette må vi sette filterparameteren i buede parenteser.
Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}
Det er på tide å bryte ned detaljene.
brakettene
Sett filteret i buede braketter.
attributtene
neste finn ut egenskaper (attributter) navn. Vi har allerede diskutert Det I PowerShell For Nybegynnere (Del 8): Kraften Til PowerShell-Komme I Kontakt Med Objekter (Get-Member, Select-Object). Husk to-trinns metoden!
Get-ADComputer client01 -Properties * | Get-Member
Side Merk: Legg Merke til egenskapsparameteren. I Active Directory vises ikke alle egenskaper som standard.
operatorene
neste bruker en operatør.
en operatør kan være-like, -som, -lik, -ne og så videre … for mer om parametertype
help about_operators
dette åpner en tekstfil som er lagret på datamaskinen din.
erklæringen
hvis vi vil filtrere noe, trenger vi en tilstand. Denne tilstanden må plasseres i anførselstegn.
Review
hvis du arbeider med filtre, se Hjelp-delen først. Filtre er vanligvis plassert i parentes. Ofte brukes en operatør også.
Noen Flere Filtereksempler … uten mye å snakke …
Søker etter brukere som har et dårlig passordtall på 0. Her er et eksempel På Petras konto:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
Søker etter brukere som har et dårlig passordtall på 0 og er aktivert. (Du vil se Petra er ikke aktivert).
Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name
Vis Alle Windows Server-Domenedatamaskiner, men bare De Som kjører Windows Server 2016 og hvis navn starter MED DC.
Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}
Men noen ganger må vi finne en annen måte. Nemlig når ingen filtrering er tilgjengelig. Da bruker Vi Hvor-Objekt.
Filtrering Med Hvor-Objekt
Hvor-Objekt er alltid på høyre side av røret. Filtrering til venstre. Hva det betyr, fordeler og ulemper på slutten av innlegget. For denne delen vil vi konsentrere Oss Om Hvor-Objekt.
her er noen eksempler Fra PowerShell-hjelpen.
Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}
jeg vil imidlertid bruke et eksempel fra et av mine bidrag.
Get-Hotfix | Where-Object HotfixID -like KB31*
Vær oppmerksom På HotFixID. Det refererer til et attributt.
den anbefalte prosedyren (på grunn av bakoverkompatibiliteten) ser slik ut:
Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}
Det er noe nytt nå. Hva betyr$_?
$_ er en variabel som itererer over hvert objekt / element passert fra forrige (rør). Enkelt sagt: ta hotfixID fra hvert objekt som kommer fra røret.
Filtrering vs. Where-Object
hvis ingen filter er tilgjengelig, bruk Where-Object. Hvis du kan bruke et filter på venstre side av røret, bruk det! Hvorfor? Vel, det er en forskjell om du sender 1000 objekter over røret eller bare 500, i tilfelle Hvor-Objekt alle objekter må passere gjennom røret og først da blir de filtrert. Husk røret fra del 7: PowerShell For Nybegynnere (Del 7): Røret (og mange eksempler å leke med)
Gjennomgang
Hvor-Objekt er alltid på høyre side av røret. Filtrering til venstre. Hvis du har valget mellom et filter på venstre side av røret eller Hvor-Objekt på høyre side, velg deretter venstre side.
Øvelse
her er øvelsen til neste del.
Where-Object:
Bruk Get-Service og Where-Object for å vise bare tjenester som kjører.
Filter (Active Directory kreves):
Bruk Filterparameteren til å få alle brukere som er deaktivert.
Se deg neste gang på emnet: PowerShell For Nybegynnere (Del 11): Ha det gøy med PowerShell-Stasjoner
Patrick Gruenauer, Mvp PowerShell