Domača » kako » Geek Šola Delo z zbirkami v PowerShell

    Geek Šola Delo z zbirkami v PowerShell

    Ker PowerShell temelji na ogrodju .Net Framework in vključuje različne druge tehnologije, kot sta WMI in CIM, vedno obstaja več načinov, kako doseči isto stvar. Pridružite se nam za ta kraj, kjer se naučimo, kako izbrati najboljšo metodo za izpolnitev naših nalog.

    Preberite prejšnje članke v seriji:

    • Naučite se avtomatizirati Windows s PowerShell
    • Učenje uporabe ukaznih vrstic v PowerShell
    • Učenje uporabe objektov v programu PowerShell
    • Učenje oblikovanja, filtriranja in primerjave v programu PowerShell
    • Naučite se uporabljati možnost Remoting v PowerShell
    • Uporaba programa PowerShell za pridobivanje informacij o računalniku

    In ostanite z nami do konca tedna.

    Uporaba paketnih ukazov

    Ko smo že v seriji, ko smo vas seznanili s cevovodom, smo vam pokazali, kako lahko vzamete predmete, ki jih prikaže ena cmdlet, in jih posredujete kot vhod v drugo ukazno vrstico s pomočjo takega:

    Get-Process -Name notepad | Stop-proces

    To bi ubilo vsak proces z imenom "notepad". Verjetno pa se sprašujete, kako lahko PowerShell ubije vsak primerek beležke z enim samim ukazom. Odgovor je v pomoči cmdleta Stop-Process.

    pomoč Stop-Process -Full

    Če pogledate zadnjo vrstico kode v oddelku sintakse, lahko vidite, da parameter InputObject sprejema objekt tipa Process [] in kadar vidite vrsto, ki ji sledita dve oglati oklepaji, pomeni, da parameter sprejema eno ali več predhodnega tipa. V tem primeru sprejme en ali več procesnih objektov. Tehnično bi rekli, da cmdlet InputObject sprejema proces matrika. Kadarkoli imate ukaz »cmdlet«, ki podpira paketne operacije na ta način, ga uporabite. To je izbira številka ena.

    Uporaba WMI

    Čeprav WMI ni najboljša tehnologija za pošiljanje iz Microsoftovega sedeža, je na drugem mestu na seznamu dela z zbirkami objektov. Tako bi lahko zlahka dobili seznam izvajanih procesov iz razreda Win32_Process:

    Get-WmiObject -Class Win32_Process

    Ker poizvedba WMI vrne svoj lastni objekt, boste morali poiskati metodo, ki lahko ustavi proces, zato omogočite cev, da pridobi člane.

    Get-WmiObject -Class Win32_Process | Get-Member

    Izgleda, da je najbližja stvar, ki jo je treba ustaviti, metoda zaključevanja, tako da mora biti tista. Če želite poklicati metodo na objektu WMI, jo preprosto preusmerite v Invoke-WmiMethod in podate ime metode..

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

    Odlično, to je uspelo. Kadarkoli dobite ReturnValue od 0 v WMI-ju, zapomnite si, da se je ukaz uspešno izvedel.

    Štetje

    Če ne boste izvedli drugih dveh metod, če boste morali nekaj narediti s kupom predmetov, lahko oštevilčite celoten predmet in ukrepate na vsakem posameznem predmetu. Najprej morate najti metodo, ki bi jo uporabili za ustavitev posameznega postopka.

    Get-Process | Metoda Get-Member-MemberType

    Odlično, zgleda, da lahko uporabimo metodo Kill in nato cev v ForEach-Object, da jih ubijemo vse.

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

    Pri tem smo vzeli vse procesne objekte, ki jih je vrnil Get-Process, in jih posredoval cmdletu ForEach-Object. Podobno kot cmdlet Where-Object smo predstavili vsak objekt v cevovodu s $ _, ki smo ga lahko klicali na metodo Kill (). Z vsem tem, kar je bilo povedano in storjeno, je nabiranje zbirke veliko počasnejše od zgoraj navedenih metod in bi ga bilo treba uporabiti le kot zadnji rezultat.

    Povzetek

    Izbira ena

    Get-Process -Name notepad | Stop-proces

    Izbira dva

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

    Izbira tri

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

    To je vse za tokratne ljudi, vidimo se naslednji teden za več zabave PowerShell.