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.