Homepage » hogyan kell » Geek iskola Gyűjteményekkel való munka PowerShell-ben

    Geek iskola Gyűjteményekkel való munka PowerShell-ben

    Mivel a PowerShell a .Net-keretrendszeren alapul, és számos más technológiát, például a WMI-t és a CIM-et is magában foglal, ugyanazzal a dologgal mindig több módja van. Jöjjön el hozzánk a rövid üzenethez, ahol megtanuljuk, hogyan válasszuk ki a legjobb módszert feladataink teljesítéséhez.

    Ügyeljen arra, hogy olvassa el a sorozat korábbi cikkeit:

    • Ismerje meg, hogyan kell automatizálni a Windowsot a PowerShell segítségével
    • Tanulj meg a Cmdlet használatát a PowerShell-ben
    • Tanulj meg, hogyan kell használni az objektumokat a PowerShell-ben
    • Tanulási formázás, szűrés és összehasonlítás a PowerShell-ben
    • Ismerje meg a Remoting használatát a PowerShell-ben
    • A PowerShell használata számítógépes információk megszerzéséhez

    És hetekig tartsd a többi sorozatot.

    Batch Cmdlet-ek használata

    Korábban a sorozatban, amikor bemutattuk Önt a csővezetékbe, megmutattuk, hogy hogyan hozhatja el az egyik cmdlet által kibocsátott objektumokat, és átadja őket egy másik cmdlet-be történő bevitelnek, ehhez hasonló módon:

    Get-Process -Neve Jegyzettömb | A Stop-Process

    Ez megölné a „notepad” nevű folyamatot. De valószínűleg kíváncsi, hogy a PowerShell képes-e egyetlen parancsgal megölni a jegyzettömb minden példányát. A válasz a Stop-Process cmdlet segítségével történik.

    segít a Stop-Process-Teljes

    Ha megnézzük a szintaxis szakasz utolsó kódsorát, akkor láthatjuk, hogy az InputObject paraméter elfogadja a [[] típusú [] típusú típust, és amikor egy olyan típust lát, amelyet két szögletes zárójel követ, azt jelenti, hogy a paraméter elfogadja egy vagy több az előző típusú. Ebben az esetben egy vagy több folyamatobjektumot fogad el. Technikailag azt mondanánk, hogy az InputObject cmdlet elfogadja a folyamatot sor. Amikor olyan cmdlet-et használ, amely így támogatja a kötegelt műveleteket, használja azt. Ez az első számú választás.

    A WMI használata

    Bár a WMI nem a legjobb technológia a Microsoft HQ-tól történő szállítására, a második helyen szerepel az objektumok gyűjteményével való munka listáján. A Win32_Process osztályból könnyen elérhetővé válhat a futó folyamatok listája:

    Get-WmiObject-Class Win32_Process

    Mivel a WMI-lekérdezés saját objektumot ad vissza, meg kell találnia egy olyan eljárást, amely leállíthatja a folyamatot, így lehetővé teszi, hogy a Get-Member-hez jusson.

    Get-WmiObject -Class Win32_Process | Get-tag

    Úgy tűnik, hogy a legközelebbi dolog megállítani a végződtetési módszert, így kell lennie az egyetlennek. A WMI-objektumon egy módszer hívásához egyszerűen csatolja azt az Invoke-WmiMethod-ra és adja meg a módszer nevét.

    Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Név Megáll

    Nagyszerű, ez a trükk. Amikor a WMI-ben 0-at kapsz egy ReturnValue értéket, csak ne feledd, hogy a parancs sikeresen végrehajtott.

    Felsorolás

    A másik két módszer hiányában, ha valamit egy csomó objektumhoz kell tennie, felsorolhatja az egész objektumot, és minden egyes objektumra cselekedhet. Először meg kell találnia azt a módszert, amelyet egy folyamat leállítására használna.

    Get-Process | Get-Member -MemberType módszer

    Tökéletes, úgy tűnik, hogy a Kill módszert használhatjuk, majd a ForEach-Objectbe csövezhetjük, hogy megöljük őket.

    Get-Process -Neve Jegyzettömb | ForEach-Object-folyamat $ _. Kill ()

    Itt minden olyan folyamatobjektumot vettünk, amelyet a Get-Process visszatért, és továbbította a ForEach-Object cmdlet-nek. A Hol-Object cmdlethez hasonlóan, a csővezetékben lévő minden objektumot $ _-vel képviseltük, amelyre a Kill () metódusra hívtunk. Minden, amit mondott és megtett, a gyűjtemény felsorolása sokkal lassabb, mint a fenti módszerek, és csak az utolsó eredményként használható.

    összefoglalás

    Egy választás

    Get-Process -Neve Jegyzettömb | A Stop-Process

    Két választás

    Get-WmiObject -Class Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Név Megáll

    Három választás

    Get-Process -Neve Jegyzettömb | ForEach-Object-folyamat $ _. Kill ()

    Ez az idő az emberek számára, jövő héten látlak több PowerShell szórakozást.