Geek-koulu Kokoelmien käsittely PowerShellissä
Koska PowerShell perustuu .Net Frameworkiin ja siinä on useita muita tekniikoita, kuten WMI ja CIM, sama tapa on aina useampi kuin yksi. Tule mukaan tähän lyhyeen viestiin, jossa opimme valitsemaan parhaan menetelmän tehtävien suorittamiseksi.
Muista lukea sarjan aiemmat artikkelit:
- Opi automatisoimaan Windows PowerShellillä
- Oppiminen käyttämään Cmdlet-tiedostoja PowerShellissä
- Opi käyttämään esineitä PowerShellissä
- Oppimisen muotoilu, suodatus ja vertailu PowerShellissa
- Opi käyttämään Remotingia PowerShellissä
- PowerShellin käyttäminen tietokoneen tietojen saamisessa
Ja pysy kuulolla koko sarjan koko viikon ajan.
Eräryhmän käyttäminen
Aiemmin sarjassa, kun esittelimme sinut putkilinjaan, näytimme sinulle, miten voit ottaa objektit, jotka yksi cmdlet tuottaa, ja välittää ne tuloksi toiseen cmdletiin käyttämällä jotain tällaista:
Get-Process -Nime-muistilehti Stop-prosessi
Tämä tappaisi minkä tahansa prosessin, jonka nimi on ”notepad”. Mutta luultavasti ihmettelet, kuinka PowerShell pystyy tappamaan jokaisen notepad-instanssin yhden komennon avulla. Vastaus on Stop-Process cmdletin avulla.
auttaa Stop-Process-Täydellinen
Jos tarkastelet syntaksin osion viimeistä koodiriviä, voit nähdä, että InputObject-parametri hyväksyy tyypin Process [] -kohdan, ja aina, kun näet tyypin, jota seuraa kaksi sellaista, että se hyväksyy yksi tai useampi edellisen tyyppinen. Tässä tapauksessa se hyväksyy yhden tai useamman prosessin kohteen. Teknisesti sanomme, että InputObject cmdlet hyväksyy prosessin ryhmä. Kun sinulla on cmdlet, joka tukee erätoimintoja tällä tavalla, käytä sitä. Tämä on valinta numero yksi.
WMI: n käyttäminen
Vaikka WMI ei ole paras teknologia toimitettavaksi Microsoftin päämajasta, se tulee toiseksi listalle, jossa käsitellään esineiden kokoelmia. Voisimme helposti saada luettelon käynnissä olevista prosesseista Win32_Process-luokasta näin:
Get-WmiObject-luokka Win32_Process
Koska WMI-kysely palauttaa oman tyyppisen esineen, sinun on etsittävä menetelmä, joka voi pysäyttää prosessin, joten anna sen siirtyä Get-Memberiin.
Get-WmiObject-luokka Win32_Process | Get-jäsen
Näyttää siltä, että lähimpänä pysäyttävä asia on lopetusmenetelmä, joten sen on oltava yksi. Jos haluat soittaa WMI-objektissa olevaan menetelmään, yksinkertaisesti siirrä se Invoke-WmiMethodiin ja määritä menetelmän nimi.
Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lopeta
Hyvä, se teki temppu. Aina kun saat palautusarvon 0 WMI: ssä, muista vain, että komento suoritettiin onnistuneesti.
luettelointi
Jos muita kahta menetelmää ei ole, jos haluat tehdä jotakin joukkoa esineitä, voit luetella koko objektin ja toimia kunkin yksittäisen kohteen kohdalla. Ensin on löydettävä menetelmä, jolla voit pysäyttää yhden prosessin.
Get-Process | Get-Member-jäsenyypin menetelmä
Täydellinen, näyttää siltä, että voimme käyttää Kill-menetelmää ja sitten putkea ForEach-Objectiin tappamaan ne kaikki.
Get-Process -Nime-muistilehti ForEach-Object -Process $ _. Kill ()
Täällä otimme kaikki prosessin kohteet, jotka Get-Process palautti ja välittivät ne ForEach-Object-cmdletille. Paljon samanlaista kuin missä-Object-cmdlet, me edustimme kukin putkilinjan objektin kanssa $ _, jota pystyi soittamaan Kill () -menetelmällä. Kun kaikki on sanottu ja tehty, kokoelman luettelointi on paljon hitaampaa kuin edellä mainitut menetelmät ja sitä tulisi käyttää vain viimeisenä tuloksena.
Yhteenveto
Yksi valinta
Get-Process -Nime-muistilehti Stop-prosessi
Kaksi vaihtoehtoa
Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lopeta
Kolme vaihtoehtoa
Get-Process -Nime-muistilehti ForEach-Object -Process $ _. Kill ()
Se on kaikki tällä kertaa ihmiset, nähdä sinut ensi viikolla enemmän PowerShell hauskaa.