Kotisivu » miten » Geek-koulu Kokoelmien käsittely PowerShellissä

    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.