If-Koubou

Geek School: Rad s zbirkama u PowerShellu

Geek School: Rad s zbirkama u PowerShellu (Kako da)

Budući da se 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 ostvarivanja 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 serije:

  • Saznajte kako automatizirati sustav Windows pomoću programa PowerShell
  • Učenje pomoću Cmdletsa u PowerShellu
  • Učenje kako koristiti objekte u PowerShellu
  • Oblikovanje učenja, filtriranje i uspoređivanje u PowerShellu
  • Saznajte kako koristiti Remoting u PowerShellu
  • Upotreba programa PowerShell za dobivanje informacija o računalu

I ostanite u tijeku cijele serije cijeli tjedan.

Korištenje Batch Cmdlets

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 drugi cmdlet pomoću ovakvog:

Get-Process -Name Notepad Stop-Proces

To bi ubila svaki 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.

pomoć Stop-Process-Puno

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

Upotreba WMI-a

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

Get-WmiObject -Class Win32_Process

Budući da upit WMI vraća vlastitu vrstu objekta, morat ćete potražiti metode koje mogu zaustaviti postupak, stoga omogućuje cijev da Get-Memberu.

Get-WmiObject -Class Win32_Process | Get-članica

Izgleda da je najbliža stvar za zaustavljanje metoda prekida, pa 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

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

nabrajanje

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

Get-proces | Get-Member-Metoda člana tipa

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

Get-Process -Name Notepad Za svaki objekt -proces ($ _. Ubiti ()

Ovdje smo preuzeli sve procesne objekte koje je Get-Process vratio i proslijedio ih cmdletu ForEach-Object. Slično kao cmdlet Where-Object, predstavili smo svaki objekt u 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 zadnji rezultat.

Sažetak

Izbor jedan

Get-Process -Name Notepad Stop-Proces

Izbor dva

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

Izbor tri

Get-Process -Name Notepad Za svaki objekt -proces ($ _. Ubiti ()

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