Početna » kako da » Geek škola koja radi s zbirkama u programu PowerShell

    Geek škola koja radi s zbirkama u programu PowerShell

    Budući da se PowerShell temelji na .Net Frameworku i uključuje razne druge tehnologije kao što su WMI i CIM, uvijek postoji više od jednog načina da se postigne ista stvar. Dođite i pridružite nam se na ovom kratkom postu gdje ćemo naučiti kako odabrati najbolji način za izvršenje naših zadataka.

    Svakako pročitajte prethodne članke iz serije:

    • Saznajte kako automatizirati sustav Windows pomoću programa PowerShell
    • Učenje korištenja Cmdletova u PowerShell-u
    • Učenje korištenja objekata u programu PowerShell
    • Učenje oblikovanja, filtriranja i uspoređivanja u programu PowerShell
    • Naučite kako koristiti daljinski rad u programu PowerShell
    • Upotreba PowerShell-a za dobivanje informacija o računalu

    Ostanite u tijeku cijeli tjedan.

    Korištenje paketnih naredbi

    Ranije u seriji, kada smo vas upoznali s cjevovodom, pokazali smo vam kako možete uzeti objekte koje jedan cmdlet izlazi i proslijediti ih kao ulaz u drugi cmdlet koristeći nešto slično ovome:

    Get-Process -Name notepad | Stop-Proces

    To bi ubilo svaki proces s nazivom "notepad". No, vjerojatno se pitate kako PowerShell može ubiti svaku instancu bilježnice s jednom naredbom. Odgovor leži u pomoći cmdlet-a Stop-Process.

    pomoć Stop-Process-Full

    Ako pogledate posljednji redak koda u odjeljku sintakse, možete vidjeti da parametar InputObject prihvaća objekt tipa Process [], i kad god vidite tip koji slijedi dva kvadratna zagrada, to znači da parametar prihvaća jedan ili više prethodnog tipa. U tom slučaju, prihvaća jedan ili više procesnih objekata. Tehnički bismo rekli da cmdlet InputObject prihvaća proces red. Kad god imate cmdlet koji na taj način podržava skupne operacije, koristite ga. Ovo je izbor broj jedan.

    Koristeći WMI

    Iako WMI nije najbolja tehnologija koju treba isporučiti iz sjedišta tvrtke Microsoft, ona se pojavljuje na drugom mjestu na popisu kako raditi s zbirkama objekata. Mogli bismo lako dobiti popis pokrenutih procesa iz klase Win32_Process na takav način:

    Get-WmiObject -Class Win32_Process

    Budući da WMI upit vraća vlastitu vrstu objekta, trebat ćete tražiti metodu koja može zaustaviti proces, tako da nam omogućuje da cijev dođe do člana.

    Get-WmiObject-klasa Win32_Process | Get-članica

    Izgleda da je najbliža stvar koju treba zaustaviti metoda završavanja, tako da ona mora biti ona. Da biste pozvali metodu na WMI objektu, jednostavno je odvedite u Invoke-WmiMethod i navedite ime metode.

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

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

    nabrajanje

    Ako ne uspijete primijeniti druge dvije metode, ako morate nešto učiniti za hrpu objekata, možete nabrojiti cijeli objekt i djelovati na svaki pojedini objekt. Prvo morate pronaći metodu kojom biste zaustavili jedan proces.

    Get-Process | Metoda Get-Member-MemberType

    Savršeno, izgleda da možemo upotrijebiti metodu ubijanja, a zatim uvući u ForEach-Object kako bismo ih sve ubili.

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

    Ovdje smo uzeli sve procesne objekte koje je Get-Process vratio i proslijedio ih cmdletu ForEach-Object. Slično kao i cmdlet Where-Object, predstavili smo svaki objekt u cjevovodu s $ _ za koji smo mogli pozvati Kill () metodu na. Uz sve to što je rečeno i učinjeno, nabrajanje zbirke je puno sporiji od gore navedenih metoda i treba se koristiti samo kao posljednji 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 Terminate

    Izbor tri

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

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