We have already learned a lot about PowerShell. Viimeksi kun työskentelimme WMI: PowerShell for Beginners (Osa 9): Hanki kaikki Windowsista Powershellilla ja WMI nyt, mielestäni on paras aika keskittyä aiheeseen ”suodatus Powershellilla”. Mutta katsotaan ensin harjoitusta viimeisestä osasta.
sarjan kaikki osat löytyvät täältä: PowerShell for Beginners (Series)
Review (Part 9)
tässä on tehtävä ja ratkaisu osasta 9:
hae tietoa kiintolevystäsi. Käytä Get-WmiObject-tai Get-Cimininstance-ohjelmaa. Etsi ensin WMI-objekti ja kun olet löytänyt sen, Näytä nimi, osiot, malli, Firmware ja sarjanumero.
ensin on selvitettävä WMI-instanssin nimi. Koska tehtävä viittaa kiintolevyyn, voisimme etsiä esimerkiksi * disk*.
Get-WmiObject *disk* -List
Win32_DiskDrive kuulostaa hyvältä. Muista kaksivaiheinen menetelmä osasta 8 saadaksesi enemmän irti Powershellista:
Get-CimInstance win32_diskdrive | Get-Member
Sieltä löydät sopivat attribuutit. Nyt käytä Select-Object saada ne kaikki.
Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
arvostelu
WMI (Windows Management Instruments) tarjoaa luku-ja kirjoitusoikeuden lähes kaikkiin Windowsin asetuksiin. Tärkeitä cmdletejä on kaksi: Get-WmiObject ja Get-Cimininstance.
miksi suodatus?
suodatus on keskeinen tekniikka Powershellissa. Kun osaat suodattaa, saat enemmän irti Powershellista.
no, minun tehtäväni tässä osassa on selittää, miksi suodatus on tärkeää. Ok oletetaan, että sinulla on enemmän kuin yksi harddisk. Yllä oleva tuloste näyttää kaikki kiintolevyt. Mutta haluat näyttää vain Samsungin kiintolevyt, esimerkiksi.
miksi haluat tehdä näin? Ehkä pomosi kysyy, kuinka monta Samsungin levyä on käytössä. Kaikilla tietokoneilla. Muista, että WMI ja PowerShell mahdollistavat etäkyselyiden tekemisen. Palataan aiheeseen. Haluamme vain Samsung SSD 500 Gt. Katso suodatinparametria!
Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
seuraava on hieman tavallisesta poikkeava ja edistyneemmille PowerShell-nörteille, mutta miksi ei? Seuraava komento saa kaikki Samsungin SSD-levyt kaikista domain-tietokoneista, mutta ei palvelimilta.
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
Jos työkaverisi luulevat, että sinulla on ratkaisematon ongelma, paina nappeja ja näytä, mihin pystyt. 😉
Ok, mennään esimerkkeihin aloittelijoille.
Filtering Objects
Muistatko Get-ChildItem-komennon? Olen käyttänyt tätä komentoa hyvin usein tässä sarjassa.
Jos suoritat Get-Help Get-ChildItem-ohjelman, löydät ohjeesta paljon suodatusesimerkkejä.
Get-Help Get-ChildItem -Online
käytän mieluummin paikallista apua.
Get-Help Get-ChildItem -Examples
mitä olemme oppineet tähän mennessä?
suodatus on keskeinen tekniikka Powershellissa. Kun ymmärrät kuinka suodattaa, saat enemmän irti Powershellista.
suodatus Active Directory-objektit
Jos olet IT-ammattilainen, työskentelet todennäköisesti Active Directory-ympäristössä. Suodatus on keskeinen tekniikka työskenneltäessä Active Directory-objektien kanssa.
seuraava komento käyttää Suodatinparametria kaikkien käytöstä poistettujen käyttäjien saamiseksi:
Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name
saatat ihmetellä, mistä tiedän attribuuttien nimet? Muista 2-vaiheinen menetelmä saada enemmän irti esineitä: 1. käytä Get-jäsentä 2. käytä Select-objektia.
Suodatinparametri
katsotaan ympärilleen. Mitkä komennot käyttävät suodatinparametria? Huomaa, että olen verkkotunnuksen ohjain.
Get-Command -ParameterName Filter
kuten näkyy, Suodatinparametria käytetään enimmäkseen Active Directory-komennoissa. Ja minun on myönnettävä, että olen aina käyttänyt suodatinparametria vain Active Directorylle. Niin se vain on. Keskitytään siis Active Directoryyn. Sano, että haluamme kaikki toimialueen Tietokoneet (palvelimen käyttöjärjestelmä ja asiakkaan käyttöjärjestelmä) lajiteltu käyttöjärjestelmä. Tätä varten meidän on käytettävä suodatinparametria *.
Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem
suodattamisen kannalta tämä oli yksinkertainen tehtävä.
suodatusmenetelmä
nyt yritetään saada kaikki tietokoneet, joissa on Windows 10 asennettuna. Tätä varten meidän täytyy laittaa suodatin parametri kaareva suluissa.
Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}
on aika eritellä yksityiskohtia.
suluissa
suodatin laitetaan kaareviin kannattimiin.
attribuutit
selvittävät seuraavaksi ominaisuuksien (attribuuttien) nimen. Olemme jo keskustelleet siitä PowerShell for Beginners (Part 8): The Power of PowerShell – Getting in Touch with Objects (Get-Member, Select-Object). Muista kaksivaiheinen menetelmä!
Get-ADComputer client01 -Properties * | Get-Member
sivuhuomautus: huomaa ominaisuudet-parametri. Active Directoryssa kaikki ominaisuudet eivät näy oletusarvoisesti.
operaattorit
käyttävät seuraavaksi operaattoria.
operaattori voi olla-like, -as, -equal, -ne ja niin edelleen … lisätietoja parametreista tyyppi
help about_operators
Tämä avaa tekstitiedoston, joka on tallennettu tietokoneellesi.
lauseke
Jos haluamme suodattaa jotain, tarvitsemme ehdon. Tämä ehto on merkittävä lainausmerkkeihin.
arvostelu
Jos käytät suodattimia, katso Ohje-osio ensin. Suodattimet sijoitetaan yleensä sulkeisiin. Usein käytetään myös operaattoria.
lisää Suodatusesimerkkejä … ilman sen kummempaa puhetta …
etsii käyttäjiä, joiden salasanamäärä on huono 0. Tässä esimerkki Petran kertomuksesta:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
etsii käyttäjiä, joilla on huono salasanamäärä 0 ja jotka ovat käytössä. (Näet Petra ei ole käytössä).
Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name
näyttää kaikki Windows Server-toimialueen tietokoneet, mutta vain ne, joissa on käytössä Windows Server 2016 ja joiden nimet alkavat DC: llä.
Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}
mutta joskus on löydettävä toinen keino. Nimittäin silloin, kun suodatusta ei ole saatavilla. Sitten käytämme missä-objekti.
suodatus missä-objekti
missä-objekti on aina putken oikealla puolella. Suodatus vasemmalla. Mitä se tarkoittaa, hyvät ja huonot puolet lopussa postitse. Tässä osassa keskitymme missä-objekti.
Tässä muutamia esimerkkejä PowerShell-ohjeesta.
Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}
haluaisin kuitenkin käyttää esimerkkinä erästä puheenvuoroani.
Get-Hotfix | Where-Object HotfixID -like KB31*
kiinnitä huomiota Hotfixidiin. Se viittaa attribuuttiin.
suositeltava menettely (taaksepäin yhteensopivuuden vuoksi) näyttää tältä:
Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}
nyt on jotain uutta. Mitä $_ tarkoittaa?
$_ on muuttuja, joka iteroi jokaisen edelliseltä johdetun objektin / elementin päälle (putki). Yksinkertaisesti sanottuna: ota hotfixID jokaisesta esineestä, joka tulee putkesta.
Filtering vs. Where-Object
Jos suodatinta ei ole saatavilla, käytä Where-Object-suodatinta. Jos voit käyttää suodatinta putken vasemmalla puolella, käytä sitä! Miksi? No, se on eri, lähetätkö 1000 objektia putken yli vai vain 500, Jos-objekti kaikkien objektien on kuljettava putken läpi ja vasta sitten ne suodatetaan. Remember the pipe from part 7: PowerShell for Beginners (Part 7): the Pipe (and many examples to play with)
Review
Where-Object is always on the right side of the pipe. Suodatus vasemmalla. Jos sinulla on mahdollisuus valita suodattimen vasemmalla puolella putken tai missä-objektin oikealla puolella, Valitse vasen puoli.
harjoitus
tässä harjoitellaan seuraavaan osaan asti.
missä-objekti:
käytä Get-palvelua ja missä-objektia näyttääksesi vain käynnissä olevat palvelut.
suodatin (Active Directory pakollinen):
käytä Suodatinparametria saadaksesi kaikki Käytöstä poistetut käyttäjät.
see you next time at the topic: PowerShell for Beginners (Part 11): Having fun with PowerShell Drives
Patrick Gruenauer, MVP PowerShell