Tämä on osa jatkuvaa blogisarjaa, jonka on kirjoittanut Adam Gordon. Adam käy joka viikko läpi yhden PowerShell-komennon ja näyttää, milloin ja miten kutakin komentoa kannattaa käyttää. Tällä viikolla Adam käsittelee Where-Objectia.
Kun käyttää Where-Objectia
Cdlet Where-Object valitsee sille välitetystä objektien kokoelmasta objekteja, joilla on tietyt ominaisuuksien arvot.
Windows PowerShell 3.0:sta alkaen Where-Object-komennon voi rakentaa kahdella eri tavalla.
- Script block. Skriptilohkon avulla voit määrittää ominaisuuden nimen, vertailuoperaattorin ja ominaisuuden arvon. Where-Object palauttaa kaikki objektit, joiden kohdalla skriptilohkon lauseke on tosi.
- Vertailulauseke. Voit myös kirjoittaa vertailulausekkeen, joka muistuttaa paljon enemmän luonnollista kieltä.
How to use Where-Object
Get stopped services:
(1.) Get-Service | Where-Object {$_.Status -eq ”Pysäytetty”}
(2.) Get-Service | where Status -eq ”Pysäytetty”
Näillä komennoilla saadaan luettelo kaikista tällä hetkellä pysäytetyistä palveluista.
Automaattimuuttuja $_ edustaa jokaista kohdetta, joka siirretään Where-Object-cmdletille.
(1.) komento käyttää komentosarjalohkon muotoa, (2.) komento käyttää vertailulausekkeen muotoa.
Hakee prosessit työjoukon perusteella:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Näillä komennoilla luetellaan prosessit, joiden työmäärä on suurempi kuin 25 000 kilotavua (KB).
Koska WorkingSet-ominaisuuden arvo tallennetaan tavuina, arvo 25 000 kerrotaan 1024:llä.
Skriptilohko- ja lausekesyntaksi vastaavat toisiaan, ja niitä voidaan käyttää keskenään vaihdettavina.
Käytä vertailulausekemuotoa:
(1.) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2.) Get-Process | where Handles -GE 1000
Tässä esimerkissä näytetään, miten Where-Object-cmdletin uutta vertailulausekemuotoa käytetään.
(1.) komento käyttää vertailulausekemuotoa. Tässä komennossa ei käytetä peitenimiä ja kaikki parametrit sisältävät parametrin nimen.
(2.) komento on vertailukomennon muodon luonnollisempi käyttö. Where-alias korvaa Where-Object-komentokomennon nimen ja kaikki valinnaisten parametrien nimet jätetään pois.
Käytä useita ehtoja:
Get-Module -ListAvailable | where {($_.Name -notlike ”Microsoft*” -and $_.Name -notlike ”PS*”) -and $_.HelpInfoUri}
Komento käyttää Get-Module-komentokomennon -ListAvailable-parametria saadakseen kaikki tietokoneen moduulit.
Putkioperaattori (|) lähettää moduulit Where-Object-komentokomennolle, joka hakee moduulit, joiden nimi ei ala Microsoftilla tai PS:llä ja joilla on arvo HelpInfoURI-ominaisuudelle, joka kertoo PowerShellille, mistä moduulin päivitetyt ohjetiedostot löytyvät.
Vertailulausekkeet on yhdistetty loogisella And-operaattorilla.
Esimerkissä käytetään komentolohkon komentomuotoa.
Huomautus: Loogiset operaattorit, kuten And ja Or, ovat voimassa vain komentolohkoissa. Niitä ei voi käyttää Where-Object-komennon vertailulausekemuodossa.
Opi viime viikon komento: Get-WinEvent.
Tarvitsetko PowerShell-koulutusta? Tutustu ITProTV:n PowerShell-tietotekniikan verkkokoulutuksiin.