11Sep
Keďže PowerShell je založený na. Net Framework a obsahuje rôzne iné technológie ako WMI a CIM, vždy existuje viac ako jeden spôsob, ako dosiahnuť to isté.Pridajte sa k nám na tento krátky príspevok, kde sa naučíme vybrať najlepšiu metódu na splnenie našich úloh.
Uistite sa, že ste si prečítali predchádzajúce články v sérii:
- Naučte sa automatizovať systém Windows s PowerShell
- Naučiť sa používať cmdlety v PowerShell
- Učenie ako používať objekty v PowerShell
- Formovanie, filtrovanie a porovnávanie učení v PowerShell
- Naučte sa používať Remoting inPowerShell
- Použitie programu PowerShell na získanie informácií o počítači
A zostávajte celú týždeň na zvyšok série.
Použitie šarže
Predtým, ako sme v sérii, keď sme vás uviedli do potrubia, ukázali sme vám, ako môžete vziať objekty, ktoré majú jeden výstup cmdlet a odovzdať ich ako vstup do iného cmdlet pomocou niečoho takto:
Get-Process -Meno poznámkaStop-Process
Tým by sa zablokoval každý proces s názvom "notepad".Ale pravdepodobne sa zaujímate o to, ako je PowerShell schopný zabiť každú inštanciu poznámkového bloku jediným príkazom. Odpoveď spočíva v pomoci stop-process cmdlet.
help Stop-Process-Full
Ak sa pozriete na posledný riadok kódu v sekcii syntaxe, môžete vidieť, že parameter InputObject akceptuje objekt typu Process [] a vždy, keď uvidíte typ nasledovaný dvoma hranatými zátvorkamiže to znamená, že parameter akceptuje jeden alebo viac predchádzajúceho typu. V tomto prípade prijíma jeden alebo viac objektov procesu. Technicky by sme povedali, že cmodlet InputObject akceptuje proces pole .Kedykoľvek máte cmdlet, ktorý týmto spôsobom podporuje dávkové operácie, použite ho. Toto je voľba číslo jedna.
Použitie WMI
Hoci WMI nie je najlepšou technológiou na prenášanie z HQ spoločnosti Microsoft, prišiel na druhú stranu na zozname, ako pracovať so zbierkami predmetov. Mohli by sme ľahko získať zoznam bežiacich procesov z triedy Win32_Process takto:
Get-WmiObject -lass Win32_Process
Keďže dotaz WMI vráti vlastný typ objektu, budete musieť hľadať spôsob, ktorý môže zastaviť proces, takžeumožňuje potrubie, aby získal-člen.
Get-WmiObject - trieda Win32_Process |Get-Member
Vyzerá to, že najbližšia vec, ktorú treba zastaviť, je metóda ukončenia, takže musí byť tá, ktorá je ukončená.Ak chcete zavolať metódu na objekte WMI, jednoducho ju nasmerujte na Invoke-WmiMethod a zadajte názov metódy.
Get-WmiObject - trieda Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Terminate
Skvelý, to urobil trik. Kedykoľvek dostanete ReturnValue 0 v službe WMI, nezabudnite, že príkaz bol vykonaný úspešne.
Vymenovanie
Pokiaľ nedosiahnete ostatné dve metódy, ak musíte urobiť niečo pre veľa objektov, môžete vymenovať celý objekt a konať na každom jednotlivom objekte. Najprv musíte nájsť metódu, ktorú by ste použili na zastavenie jedného procesu.
Get-ProcessGet-Member -MemberType Metóda
Dokonalé, vyzerá to, že môžeme použiť metódu Kill a potom potrubie do objektu ForEach, aby sme ich všetko zabili.
Get-Process -Name notepadForEach-Object-Process( $ _.Kill()}
Tu sme vzali všetky procesné objekty, ktoré Get-Process vrátil a odovzdal ich do rutiny ForEach-Object. Rovnako ako cmdlet Kde-Objekt sme predstavovali každý objekt v potrubí s $ _, ktorý sme mohli zavolať na metódu Kill() .So všetko, čo bolo uvedené a urobené, vyčíslenie kolekcie je oveľa pomalšie ako vyššie uvedené metódy a malo by byť použité len ako posledný výsledok.
Zhrnutie
Voľba Jeden
Get-Process -Name notepadZastavenie procesu
Voľba dvoch
Get-WmiObject - trieda Win32_Process -Filter "name = 'notepad.exe" "|Invoke-WmiMethod -Name Terminovať
Voľba Tri
Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}
To je všetko pre túto chvíľu ľudia, uvidíme vás budúci týždeň pre viac zábavy PowerShell.