Koduleht » kuidas » Geek Kool Kollektsioonidega töötamine PowerShellis

    Geek Kool Kollektsioonidega töötamine PowerShellis

    Kuna PowerShell põhineb .Net Frameworkil ja sisaldab mitmeid teisi tehnoloogiaid, nagu WMI ja CIM, on sama asi alati rohkem kui üks viis. Tulge liituda meiega selle lühikese ametikoha jaoks, kus me õpime, kuidas valida parim viis meie ülesannete täitmiseks.

    Lugege kindlasti seeria eelmisi artikleid:

    • Lugege, kuidas Windowsi PowerShelli abil automatiseerida
    • Õppimine kasutama Cmdleti PowerShellis
    • Õppimine, kuidas kasutada objekte PowerShellis
    • Vormindamine, filtreerimine ja võrdlemine PowerShellis
    • Õpi kasutama Remotingit PowerShellis
    • PowerShelli kasutamine arvutiteabe saamiseks

    Ja hoia ülejäänud sarja jaoks terve nädal.

    Partii käsikirjade kasutamine

    Varem selles seerias, kui tutvustasime teid torujuhtmele, näitasime teile, kuidas te saate võtta ühe cmdleti väljundiga objektid ja edastada need sisendina teise cmdletile, kasutades selleks midagi sellist:

    Get-Process -Nime notepad | Stop-protsess

    See tapaks mis tahes protsessi nimega “notepad”. Kuid te olete ilmselt mõelnud, kuidas PowerShell suudab ühe käskuga iga notepadi eksemplari tappa. Vastus on Stop-Process cmdleti abiga.

    aidata Stop-Process -Täielik

    Kui vaatate süntaksiosa koodi viimast rida, näete, et parameeter InputObject aktsepteerib tüübi Protsess [] ja alati, kui näete tüüpi, millele järgneb kaks ruuduklambrit, tähendab, et parameeter aktsepteerib üks või mitu eelnevat tüüpi. Sellisel juhul võtab ta vastu ühe või mitu protsessiobjekti. Tehniliselt öeldakse, et cmdlet InputObject aktsepteerib protsessi massiivi. Kui teil on cmdlet, mis sellisel viisil partiitoiminguid toetab, kasutage seda. See on valik number üks.

    WMI kasutamine

    Kuigi WMI ei ole parim tehnoloogia Microsofti peakorterist saadetavaks tehnoloogiaks, on see teisel kohal objektide kollektsioonidega töötamise nimekirjas. Me võime kergesti saada Win32_Process klassi jooksvate protsesside nimekirja:

    Get-WmiObject-klass Win32_Process

    Kuna WMI päring tagastab oma laadi objekti, peate otsima meetodi, mis võib protsessi peatada, nii et lasete selle hankida kasutajale Get-Member.

    Get-WmiObject-klass Win32_Process | Get-Member

    Paistab, et lähim asi on lõpetada meetod, nii et see peab olema üks. WMI objektil meetodi helistamiseks piirduge lihtsalt Invoke-WmiMethodiga ja määrake meetodi nimi.

    Get-WmiObject-klass Win32_Process -filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lõpeta

    Suur, see tegi trikki. Kui saad WMI-s 0-st väärtuse ReturnValue, pea meeles pidama, et käsk edukalt sooritatud.

    Loendamine

    Ülejäänud kahe meetodi puudumisel, kui teil on vaja midagi teha objektide hulga kohta, saate loendada kogu objekti ja tegutseda iga üksiku objekti suhtes. Kõigepealt peate leidma meetodi, mida sa kasutaksid ühe protsessi peatamiseks.

    Get-protsess Get-Member-liikme tüüp

    Täiuslik, näib, et saame kasutada Kill-meetodit ja seejärel toreda ForEach-Objecti, et neid kõiki tappa.

    Get-Process -Nime notepad | ForEach-Object-Protsess $ _. Kill ()

    Siin me võtsime kõik protsessi objektid, mille Get-Process tagastas ja edastas need ForEach-Object cmdletile. Sarnaselt sellele, kus cmdleti on-Object-objekt, esindasime iga torujuhtme objekti objektiga $ _, mida me võime helistada Kill () meetodile. Kõik, mis öeldi ja tehtud, on kogumise loendamine palju aeglasem kui ülaltoodud meetodid ja seda tuleks kasutada ainult viimase tulemuse kujul.

    Kokkuvõte

    Üks valik

    Get-Process -Nime notepad | Stop-protsess

    Teine valik

    Get-WmiObject-klass Win32_Process -filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lõpeta

    Valik kolm

    Get-Process -Nime notepad | ForEach-Object-Protsess $ _. Kill ()

    See on kõik selleks ajaks inimesed, näeme sind järgmisel nädalal rohkem PowerShelli lõbusaks.