11Sep

Geek Iskola: A PowerShell gyűjteményeinek használata

Mivel a PowerShell a. Net Frameworken alapul, és számos más technológiával rendelkezik, mint például a WMI és a CIM, mindig ugyanazt a módot érheti el. Jöjjön hozzánk a rövid álláshoz, ahol megtanuljuk, hogyan válasszuk ki a legjobb módszert a feladatok elvégzéséhez.

Olvassa el a korábbi cikkeket a sorozatban:

  • Ismerje meg a Windows automatizálását a PowerShell segítségével
  • A PowerShell cmdletek használatának tanítása
  • A PowerShell objektumok használatának tanulása
  • Tanulási formázás, szűrés és összehasonlítás a PowerShell
  • -ben Tanuljon meg a távoli telepítéshezPowerShell
  • A PowerShell segítségével a számítógépes információk beszerzése

A hét minden részében maradjon a sorozatban.

A Batch Cmdlets

használata A sorozat elején, amikor bemutattuk a csővezetékhez, megmutattuk, hogy miként teheti meg az egy cmdlet által kiadott objektumokat, és adja át őket egy másik cmdlethez hasonló módon:

Get-Process -Név jegyzettömb |Stop-Process

Ez a "jegyzettömb" nevét elpusztítja. De valószínűleg arra gondolsz, hogy a PowerShell képes egyetlen példányban megölni a jegyzettömb minden egyes példányát. A válasz a Stop-Process cmdlet segítségével történik.

help Stop-Process -Teljes

Ha megnézed a kód utolsó sorát a szintaxis szakaszban, akkor láthatod, hogy az InputObject paraméter elfogadja a Process [] típusú objektumot, és amikor olyan típust látsz, amelyet két szögletes zárójelhogy ez a paraméter elfogadja az -t az előző típus egy vagy több -jét. Ebben az esetben egy vagy több folyamatobjektumot fogad el. Technikailag azt mondhatjuk, hogy az InputObject cmdlet egy folyamatát fogadja el. Ha van olyan cmdlet, amely támogatja a kötegelt műveleteket ilyen módon, használja. Ez az első számú választás.

A WMI

használata Bár a WMI nem a legjobb technikai megoldás a Microsoft HQ-ból való szállításhoz, az a második helyen található, hogy hogyan kezeljük az objektumok gyűjteményét. A Win32_Process osztályból futó folyamatok listáját egyszerűen megkaphatjuk:

Get-WmiObject -Class Win32_Process

Mivel a WMI-lekérdezés visszatér saját típusú objektumához, meg kell keresnie egy olyan eljárást, amely leállíthatja a folyamatot, ígylehetővé teszi a pipát, hogy a Get-Tag.

Get-WmiObject -Class Win32_Process |Get-Member

Úgy tűnik, hogy a legközelebbi dolog, ami megáll, az a végződtetési módszer, tehát ennek kell lennie. Ha WMI-objektumon metódust szeretne hívni, egyszerűen pipálja be az Invoke-WmiMethod parancsra, és adja meg a módszer nevét.

Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Terminate

Nagyszerű, ez volt a trükk. Amikor a WMI-ben visszatérési értéket kapsz, ne felejtsd el, hogy a parancs sikeresen végrehajtódott.

Számlálás

A másik két módszer sikertelensége, ha valamit meg kell tennie egy csomó objektumra, akkor felsorolhatja az egész objektumot, és minden egyes objektumon felléphet. Először meg kell találnia azt a módszert, amelyet egyetlen folyamat leállításához használni fog.

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

Tökéletes, úgy tűnik, használhatjuk a Kill módszert, majd a ForEach-Object-be csövet, hogy megöli őket.

Get-Process -Name jegyzettömb |ForEach-Object -processzió{ $ _. Kill()}

Itt vettük meg a Get-Process összes folyamatobjektumát, és átadtuk azokat a ForEach-Object cmdletnek. Hasonlóan a Where-Object cmdlethez, a csővezeték minden egyes objektumát $ _ -val ábrázoltuk, amelyre a Kill() módszert hívhatjuk. Mindazok esetében, amelyekről elmondták és elvégezték, a gyűjtemény felsorolása sokkal lassabb, mint a fenti módszerek, és csak utolsó eredményként használható.

Összefoglaló

Választás Egy

Get-Process -Name notepad |Stop-Process

választás két

Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name befejezése

választás három

Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}

Ez az egész ebben az időben emberek, látjuk a jövő héten a PowerShell több móka.