Geek School: Práca s kolekciami v PowerShell

Obsah:

Geek School: Práca s kolekciami v PowerShell
Geek School: Práca s kolekciami v PowerShell

Video: Geek School: Práca s kolekciami v PowerShell

Video: Geek School: Práca s kolekciami v PowerShell
Video: Setup your own software APT repository with apt-mirror! - YouTube 2024, Smieť
Anonim
Vzhľadom k tomu, že PowerShell je založený na.Net Framework a obsahuje rôzne iné technológie ako WMI a CIM, existuje vždy 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.
Vzhľadom k tomu, že PowerShell je založený na.Net Framework a obsahuje rôzne iné technológie ako WMI a CIM, existuje vždy 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.

Nezabudnite si prečítať predchádzajúce články v sérii:

  • Naučte sa ako automatizovať systém Windows pomocou nástroja PowerShell
  • Naučiť sa používať Cmdlets v PowerShell
  • Učenie ako používať objekty v PowerShell
  • Formátovanie učenia, filtrovanie a porovnávanie v systéme PowerShell
  • Naučte sa používať Remoting v PowerShell
  • Použitie nástroja PowerShell na získanie informácií o počítači

A zostávajte celú týždeň na zvyšok série.

Použitie šarží

Predtým v sérii, keď sme vás predstavili do potrubia, ukázali sme vám, ako môžete vziať objekty, ktoré sa dajú vyprodukovať v jednom cmdlet a odovzdať ich ako vstup do iného cmdletu pomocou niečoho podobného:

Get-Process -Name notepad | Stop-Process

Tým by zabili všetky procesy s názvom "poznámkový blok". 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

Image
Image

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, 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 rad, 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žívanie služby WMI

Aj keď služba WMI nie je najlepšou technológiou na odosielanie z hlavného sídla spoločnosti Microsoft, prišla na druhú stranu v zozname, ako pracovať so zbierkami predmetov. Mohli by sme ľahko získať zoznam bežiacich procesov z triedy Win32_Process takto:

Get-WmiObject –Class Win32_Process

Image
Image

Keďže dotaz WMI vráti vlastný typ objektu, budete musieť hľadať metódu, ktorá môže zastaviť proces, a tak nechá dúchadlo, aby sa dostal do členstva.

Get-WmiObject –Class Win32_Process | Get-Member

Zdá sa, ž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.
Zdá sa, ž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 -Class 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.
Skvelý, to urobil trik. Kedykoľvek dostanete ReturnValue 0 v službe WMI, nezabudnite, že príkaz bol vykonaný úspešne.

výpočet

Pokiaľ nedosiahnete ostatné dve metódy, ak musíte urobiť niečo na 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-Process | Get-Member -MemberType Method

Dokonalé, zdá sa, že môžeme použiť metódu zabíjania a potom potrubie do objektu ForEach, aby sme ich všetko zabili.
Dokonalé, zdá sa, že môžeme použiť metódu zabíjania a potom potrubie do objektu ForEach, aby sme ich všetko zabili.

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

Tu sme vzali všetky procesné objekty, ktoré získali Get-Process a odovzdali 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 povedané 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.
Tu sme vzali všetky procesné objekty, ktoré získali Get-Process a odovzdali 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 povedané 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 jedna

Get-Process -Name notepad | Stop-Process

Voľba dva

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

Výber 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 PowerShell zábava.

Odporúča: