11Sep

Geek-koulu: PowerShell-kokoelmien käsittely

Koska PowerShell perustuu. Net Framework -järjestelmään ja sisältää useita muita tekniikoita, kuten WMI ja CIM, on olemassa aina vain yksi tapa tehdä sama asia. Tule mukaan tähän lyhyeen viestiin, jossa opimme valitsemaan paras tapa toteuttaa tehtäviä.

Lue oppaan artikkeleita:

  • Opi käyttämään Windowsia PowerShellillä
  • Oppiminen käyttämään PowerMax-työkaluja PowerShellissä
  • Oppiminen PowerShell-objektien käyttämisessä
  • Oppimismuotoilu, suodatus ja vertailu PowerShell
  • : ssä Opi käyttämään etäisyyttäPowerShell
  • PowerShellin avulla saat tietokoneen tietoja

Ja pysy kuulolla koko sarjan koko viikon ajan.

Batch Cmdlet -ohjelmien käyttäminen

Aikaisemmin sarjassa, kun otimme käyttöön putkijohdon, näytimme, kuinka voit ottaa esineitä, jotka yksi cmdlet tulostaa ja siirtää ne syöttöksi toiseen cmdlettiin käyttäen jotain seuraavasta:

Get-Process -Nimi notepad |Pysäytä-prosessi

Tämä menetä kaikki prosessit nimellä "notepad".Mutta olet luultavasti miettimässä, miten PowerShell pystyy taputtamaan jokaisen notepad-esiintymän yhdellä komennolla. Vastaus on Stop-Process-cmdletin avulla.

help Stop-Process -Full

Jos tarkastelet koodin viimeistä rivin syntaksio-osassa, näet, että InputObject-parametri hyväksyy tyypin [Process] -tyypin, ja aina, kun näet tyypin, jota seuraa kaksi hakasulkeita, kutenettä se tarkoittaa, että parametri hyväksyy : n yhden tai useamman edellisen tyypin : n. Tässä tapauksessa se hyväksyy yhden tai useamman prosessiesineen. Teknisesti sanomme, että InputObject-cmdlet hyväksyy prosessin -taulukon .Aina, kun sinulla on cm-osa, joka tukee erätoimintoja tällä tavalla, käytä sitä.Tämä on valinnan numero yksi.

WMI

: n käyttö Vaikka WMI ei ole paras tekniikka, joka toimitetaan Microsoftin pääkonttorista, se tulee toiseksi luettelossa siitä, miten käsitellä objektien kokoelmia. Voimme helposti saada luettelon käynnissä olevista prosesseista Win32_Process-luokasta kuten:

Get-WmiObject -Class Win32_Process

Koska WMI-kysely palauttaa omanlaisensa objektin, sinun täytyy etsiä menetelmä, joka voi lopettaa prosessin, jotenantaa putken Get-jäsenelle.

Get-WmiObject -Class Win32_Process |Get-jäsen

Näyttää siltä, ​​että lähinnä lopettaa on lopettaa menetelmä, joten se on yksi. Jos haluat kutsua menetelmän WMI-objektille, siirrä se vain Invoke-Wmi-menetelmäksi ja määritä sen nimi.

Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Lopeta

Suuri, se teki tempun. Aina kun saat WMI: n ReturnValue-arvon 0, muista, että komento suoritettiin onnistuneesti.

Enumeration

Jos muita kahdentyyppisiä menetelmiä ei ole, jos joudut tekemään jotain joukolle objekteja, voit luetella koko objektin ja toimia kunkin yksittäisen objektin kohdalla. Ensin sinun on löydettävä menetelmä, jonka avulla lopetat yhden prosessin.

Get-Process |Get-Member -MemberType -menetelmä

Täydellinen, näyttää siltä, ​​että voimme käyttää Kill-menetelmää ja sitten putkea ForEach-objektiksi tappaa ne kaikki.

Get-Process -Name muistilehtiöForEach-Object -Process{ $ _. Kill()}

Tässä otimme kaikki Get-Process-prosessin kohteet, jotka siirrettiin ForEach-Object-cmdlet -ohjelmaan. Paljon kuin esimerkiksi Where-Object-cmdlet, edustelimme jokaisen putkijohdon $ _ kanssa, jonka pystyimme soittamaan Kill() -menetelmään. Kaikkien, jotka sanovat ja tekevät, kokoelman laskeminen on paljon hitaampaa kuin edellä mainitut menetelmät, ja sitä pitäisi käyttää vain viimeisenä tuloksena.

Yhteenveto

Valinta Yksi

Get-Process -Name notepad |Stop-prosessi

valinta Kaksi

Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Lopeta

valinta Kolme

Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}

Tämä on kaikki tällä kertaa ihmiset, näet ensi viikolla enemmän PowerShell hauskaa.