Domovská » jak » Geek School Práce s kolekcemi v PowerShell

    Geek School Práce s kolekcemi v PowerShell

    Vzhledem k tomu, že PowerShell je založen na .Net Frameworku a obsahuje různé další technologie jako WMI a CIM, existuje vždy více než jeden způsob, jak dosáhnout stejné věci. Přijďte se připojit k tomuto krátkému příspěvku, kde se dozvídáme, jak si vybrat nejlepší způsob, jak splnit naše úkoly.

    Ujistěte se, že jste si přečetli předchozí články v sérii:

    • Naučte se automatizovat systém Windows pomocí nástroje PowerShell
    • Naučte se používat Cmdlets v PowerShell
    • Učení o používání objektů v prostředí PowerShell
    • Formátování učení, filtrování a porovnávání v prostředí PowerShell
    • Naučte se používat Remoting v PowerShell
    • Použití funkce PowerShell pro získání informací o počítači

    A zůstaňte v klidu po zbytek série celý týden.

    Použití šarží

    Dříve v sérii, když jsme vás představili na potrubí, ukázali jsme vám, jak můžete vzít objekty, které mají výstupy jednoho cmdletu a předat je jako vstup do jiného cmdletu pomocí něčeho podobného:

    Get-Process -Name poznámkový blok | Zastavit proces

    Tím by zabili všechny procesy s názvem "poznámkový blok". Ale asi se zajímáte, jak PowerShell dokáže zabít každou instanci poznámkového bloku jediným příkazem. Odpověď spočívá v nápovědě stop-procesu cmdlet.

    help Stop-Process -Full

    Pokud se podíváte na poslední řádek kódu v sekci syntaxe, můžete vidět, že parametr InputObject přijímá objekt typu Process [] a vždy, když uvidíte typ následovaný dvěma hranatými závorkami, znamená to, že parametr akceptuje jeden nebo více předchozího typu. V tomto případě přijímá jeden nebo více objektů procesu. Technicky bychom říkali, že InputObject cmdlet přijímá proces pole. Kdykoli máte cmdlet, který tímto způsobem podporuje dávkové operace, použijte ho. Toto je volba číslo jedna.

    Pomocí služby WMI

    Ačkoli WMI není nejlepším technologickým vybavením, které by bylo možné přenášet z ústředí společnosti Microsoft, přichází na druhé místo na seznamu, jak pracovat se sbírkami objektů. Mohli bychom snadno získat seznam běžících procesů z třídy Win32_Process takto:

    Get-WmiObject - třída Win32_Process

    Vzhledem k tomu, že dotaz WMI vrací svůj vlastní typ objektu, budete muset hledat metodu, která může zastavit proces, a tak umožňuje potrubí,.

    Get-WmiObject - třída Win32_Process | Získejte-člen

    Zdá se, že nejbližší věc, kterou chcete zastavit, je metoda ukončení, takže to musí být jedna. Chcete-li volat metodu na objekt WMI, jednoduše ji přetočte na Invoke-WmiMethod a zadejte název metody.

    Get-WmiObject - třída Win32_Process -Filter "name = 'notepad.exe'" | Invoke-WmiMethod - ukončete

    Skvělé, tohle trik. Kdykoli dostanete ReturnValue 0 v WMI, nezapomeňte, že příkaz byl proveden úspěšně.

    Výčet

    V případě selhání dalších dvou metod, pokud budete muset něco udělat na banda objektů, můžete vyčíslit celý objekt a jednat na každém jednotlivém objektu. Nejprve musíte najít způsob, který byste použili k zastavení jednoho procesu.

    Get-Process | Metoda Get-Member -MemberType

    Dokonalé, zdá se, že můžeme použít metodu zabíjení a pak potrubí do objektu ForEach, abychom je všechny zabili.

    Get-Process -Name poznámkový blok | ForEach-Object -Process $ _. Kill ()

    Zde jsme vzali všechny procesní objekty, které Get-Process vrátili a předali je do rutiny ForEach-Object. Stejně jako cmdlet Kde-Objekt jsme představovali každý objekt v potrubí s $ _, který jsme mohli zavolat na metodu Kill (). S tím, co bylo řečeno a provedeno, vyčíslení kolekce je mnohem pomalejší než výše uvedené metody a mělo by být použito pouze jako poslední výsledek.

    souhrn

    Volba jedna

    Get-Process -Name poznámkový blok | Zastavit proces

    Volba dva

    Get-WmiObject - třída Win32_Process -Filter "name = 'notepad.exe'" | Invoke-WmiMethod - ukončete

    Tři volby

    Get-Process -Name poznámkový blok | ForEach-Object -Process $ _. Kill ()

    To je všechno pro lidi z této doby, uvidíme se příští týden za další zábavu PowerShell.