11Sep

Geek School: Rad s zbirkama u PowerShellu

Budući da PowerShell temelji na. Net okviru i uključuje različite druge tehnologije kao što su WMI i CIM, uvijek postoji više od jednog načina za postizanje iste stvari. Pridružite nam se za ovaj kratki članak gdje saznajemo kako odabrati najbolju metodu za obavljanje naših zadataka.

Obavezno pročitajte prethodne članke u seriji:

  • Saznajte kako automatizirati sustav Windows pomoću PowerShell-a
  • Učiti pomoću Cmdleta u PowerShellu
  • Učiti kako koristiti objekte u PowerShellu
  • Učiti oblikovanje, filtriranje i uspoređivanje u PowerShell-u
  • Saznajte kako koristiti remont uPowerShell
  • Korištenje programa PowerShell da biste dobili informaciju o računalu

I ostati u tijeku cijele serije cijeli tjedan.

Korištenje batch cmdletova

Ranije u seriji, kada smo vas upoznali s cjevovodom, pokazali smo kako možete preuzeti objekte koje jedan cmdlet izlaze i proslijediti ih kao unos u neki drugi cmdlet koristeći nešto slično:

Get-Process -Naziv notepad |Stop-Process

To bi ubiti bilo koji proces pod nazivom "notepad".Ali vjerojatno se pitate kako PowerShell može uništiti svaku instancu Notepada jednim naredbom. Odgovor leži unutar pomoći cmdeta Stop-Processa.

help Stop-Process -Full

Ako pogledate posljednju liniju koda u sekciji sintakse, možete vidjeti da parametar InputObject prihvaća objekt tipa Process [], i kad god vidite vrstu koja slijedi dva kvadratna zagrada poputda znači da parametar prihvaća jedan ili više od prethodne vrste. U tom slučaju prihvaća jedan ili više procesnih objekata. Tehnički, reći ćemo da InputObject cmdlet prihvaća proces polje .Kad god imate cmdlet koji podržava serijske operacije na ovaj način, koristite ga. Ovo je izbor broj jedan.

Korištenje WMI-a

Iako WMI nije najbolji komad tehnologije koji se isporučuje iz Microsoftovog središta, dolazi na drugi način na popisu rada s zbirkama objekata. Mogli bismo lako nabaviti popis postojećih procesa iz klase Win32_Process tako da:

Get-WmiObject -Class Win32_Process

Budući da WMI upit vraća svoju vrstu objekta, morat ćete potražiti metode koje mogu zaustaviti proces, paomogućuje cijev da Get-Član.

Get-WmiObject -Class Win32_Process |Get-Member

Izgleda da je najbliža stvar za zaustavljanje metoda prekida, tako da mora biti ona. Da biste nazvali metodu na objektu WMI, jednostavno ga usmjerite na Invoke-WmiMethod i navedite naziv metode.

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

Velika, to je trik. Kad god dobijete ReturnValue od 0 u WMI-u, samo zapamtite da je naredba uspješno izvršena.

Brojanje

Ako ne uspijete ostale dvije metode, ako morate nešto učiniti s hrpom objekata, možete nabrojiti cijeli objekt i djelovati na svaki pojedini objekt. Prvo morate pronaći metodu koju biste upotrijebili za zaustavljanje jednog postupka.

Get-Process |Get-Member -MemberType Metoda

Savršeno, izgleda da možemo koristiti metodu ubojstva, a zatim cijev u ForEach-Object da ih sve ubijemo.

Get-Process -Name notepad |Za svaki objekt-proces( $ _. Kill()}

Ovdje smo preuzeli sve procesne objekte koje Get-Process vratio i proslijedili ih cmdletu ForEach-Object. Slično kao cmdlet Where-Object, predstavili smo svaki objekt na cjevovod s $ _ koji smo mogli pozvati na metodu Kill() .Uz sve ono što je reklo i učinjeno, popisivanje zbirke mnogo je sporije od gore navedenih metoda i treba ga koristiti samo kao posljednji rezultat.

Sažetak

Izbor jedan

Get-Process -Name notepad |Stop-Process

Izbor dva

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

izbor tri

Get-Process -Name notepad |Za svaki objekt-proces( $ _. Kill()}

To je sve za ovo vrijeme ljudi, vidimo se sljedeći tjedan za više PowerShell zabave.