11Sep
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.