Seznámení s PowerShellem

PowerShell je prostředí příkazového řádku a skriptovací jazyk v jednom. PowerShell se spustil ve Windows. Mělo to pomoct s automatizací úloh pro úlohy správy, ale nyní se zvětšil tak, aby byl více platforem a dá se použít pro různé úlohy.

To, co dělá PowerShell jedinečný, je to, že přijímá a vrací objekty .NET, nikoli text. Tato skutečnost usnadňuje připojení různých příkazů v řadě v kanálu.

Dokonce i pak možná budete muset trochu masírovat výsledky.

K čemu se dá PowerShell použít?

Využití PowerShellu se od doby, kdy se jednalo pouze o Windows, vzrostlo. Stále se používá pro automatizaci úloh Windows, ale dnes můžete použít pro různé úlohy, jako jsou:

  • Správa cloudu. PowerShell se dá použít ke správě cloudových prostředků. Můžete například načíst informace o cloudových prostředcích a také aktualizovat nebo nasadit nové prostředky.
  • CI/CD. Dá se také použít jako součást kanálu kontinuální integrace nebo průběžného nasazování.
  • Automatizujte úlohy pro službu Active Directory a Exchange. Můžete ho použít k automatizaci téměř libovolné úlohy ve Windows, jako je vytváření uživatelů ve službě Active Directory a poštovních schránkách v Exchangi.

Existuje mnoho dalšíchoblastích

Kdo používá PowerShell?

PowerShell je velmi výkonný a mnoho lidí, kteří pracují v mnoha rolích, můžou využívat jeho využití. PowerShell tradičně používal roli Správce systému, ale teď je používán lidmi, kteří volají DevOps, Cloud Ops a dokonce i vývojáři.

Rutiny prostředí PowerShell

PowerShell obsahuje stovky předinstalovaných příkazů. Příkaz PowerShellu se nazývá rutiny; vyslovuje se jako příkaz-let.

Název každé rutiny se skládá z dvojice Sloveso-Podstatné jméno . Například, Get-Process. Tato konvence vytváření názvů usnadňuje pochopení toho, co rutina dělá. Usnadňuje také vyhledání příkazu, který hledáte. Při hledání rutiny, kterou chcete použít, můžete filtrovat sloveso nebo podstatné jméno.

Použití rutin k prozkoumání PowerShellu

Při prvním vyzvednutí PowerShellu to může být děsivé, protože se zdá, že se toho tolik naučíte. PowerShell je navržený tak, aby vám pomohl trochu se naučit, jak ho potřebujete.

PowerShell obsahuje rutiny, které vám pomůžou zjistit PowerShell. Pomocí těchto tří rutin můžete zjistit, jaké příkazy jsou k dispozici, co dělají a jaké typy fungují.

  • Get-Verb. Spuštění tohoto příkazu vrátí seznam sloves, které většina příkazů dodržuje. Odpověď obsahuje popis toho, co tyto příkazy dělají. Vzhledem k tomu, že většina příkazů postupuje podle tohoto pojmenování, nastavuje očekávání ohledně toho, co příkaz dělá. To vám pomůže vybrat příslušný příkaz a název příkazu, pokud ho vytváříte.
  • Get-Command. Tento příkaz načte seznam všech příkazů nainstalovaných na vašem počítači.
  • Get-Member. Funguje na výstupu založeném na objektech a dokáže zjistit, jaké objekty, vlastnosti a metody jsou k dispozici pro příkaz.
  • Get-Help. Vyvolání tohoto příkazu s názvem příkazu jako argumentu zobrazí stránku nápovědy popisující různé části příkazu.

Pomocí těchto příkazů můžete zjistit téměř cokoli, co potřebujete vědět o PowerShellu.

Příkaz

Sloveso je důležitý koncept v PowerShellu. Jedná se o standard pojmenování, který většina rutin sleduje. Je to také standard pojmenování, který očekáváte při psaní vlastních příkazů. Myšlenka je, že sloveso říká, co se snažíte udělat, například čtení nebo změna dat. PowerShell obsahuje standardizovaný seznam sloves. Pokud chcete získat úplný seznam všech možných sloves, použijte rutinu Get-Verb :

Get-Verb

Výstupem je dlouhý seznam sloves. Co je informativní o odpovědi, je, že ukazuje také další kontext, co takový příkaz má udělat. Tady je první řádek výstupu:

Verb        AliasPrefix Group          Description
----        ----------- -----          -----------
Add         a           Common         Adds a resource to a container, or attaches an item to ano…

Hledání příkazů pomocí Get-Command

Rutina Get-Command vrátí seznam všech dostupných příkazů nainstalovaných ve vašem systému. Ten seznam, který se vrátíš, je ale docela velký. Abyste usnadnili hledání příkazů, můžete omezit množství informací, které se vrátí. Odpověď můžete filtrovat pomocí parametrů nebo pomocí pomocných rutin.

Filtrovat podle názvu

Výstup Get-Commandmůžete filtrovat pomocí různých parametrů. Filtrováním tímto způsobem se dotazuje na konkrétní vlastnost příkazu. Myšlenkou je, že určíte, jakou vlastnost chcete filtrovat, a pak zadáte řetězec, se kterým se chcete shodovat. Proto se zobrazí porovnání, které vypadá takto:

Get-Command -Name '*Process'

V tomto okamžiku se filtrování pokouší provést přesnou shodu s zadaným argumentem řetězce. Pokud chcete mít větší flexibilitu, můžete ve srovnání použít zástupný znak *, který porovnává vzor. Následující kód by hledal všechny příkazy, které název končí procesem:

Výše je parametr -Name použitý k filtrování. -NameKromě , můžete také filtrovat -ParameterName a -Type, například.

Filtrování podle podstatných jmen a sloves

Viděli jste, jak můžete filtrovat -Namea že existují i další parametry, na které můžete filtrovat. Sloveso a podstatné jméno je něco, co můžete filtrovat také. Takové filtrování cílí na část názvu příkazu.

  • Filtrovat podle slovesa. Slovesná část názvu příkazu je úplně vlevo. V příkazu Get-Processje slovesná část Get. Pokud chcete filtrovat část slovesa, zadejte -Verb jako parametr následující:

    Get-Command -Verb 'Get'
    

    Výše uvedený příkaz vypíše všechny příkazy, ve kterých je Getčást slovesa .

  • Filtrovat podle podstatných jmen. Nejpravdější část příkazu je podstatná část. Kde sloveso by mělo být mezi příkazy vrácené z vyvolání Get-Verb, podstatné jméno může být cokoli. V příkazu Get-Processje podstatná část Process. Pokud chcete filtrovat podstatné jméno, zadejte -Noun jako parametr a řetězcový argument, například takto:

    Get-Command -Noun U*
    

K filtrování může dojít pouze pomocí slovesa nebo podstatného jména k filtrování. Pokud chcete hledání zúžit, je vhodné tyto dva parametry zkombinovat jako v následujícím příkladu:

Get-Command -Verb Get -Noun U*

Výsledek výše uvedeného obrázku vypadá takto:

CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-UsageAggregates          2.0.0      Az.Billing

Tím jste zúžili výstup poměrně trochu tím, že znáte sloveso a to, co se nazývá.

Filtrování výsledků pomocí pomocných rutin

Kromě použití parametrů k filtrování můžete také použít příkazy, které vám pomůžou s tímto úkolem. Tady je několik příkazů, které můžou fungovat jako filtry:

  • Select-Object. Jedná se o velmi univerzální příkaz, který vám pomůže vybrat konkrétní vlastnosti z jednoho nebo více objektů. Kromě toho můžete pomocí parametrů omezit odpověď, kterou získáte zpět. Tady je příklad Select-Object použití k zadání omezeného počtu záznamů:

    Get-Command | Select-Object -First 3
    

    Výsledek z výše uvedeného je tři první příkazy, které se počítají shora. Výsledek vypadá takto:

    CommandType     Name                                               Version    Source
    -----------     ----                                               -------    ------
    Alias           Add-AdlAnalyticsDataSource                         1.0.2      Az.DataLakeAnalytics
    Alias           Add-AdlAnalyticsFirewallRule                       1.0.2      Az.DataLakeAnalytics
    Alias           Add-AdlStoreFirewallRule                           1.3.0      Az.DataLakeStore
    

    Je vhodné se na tento příkaz podívat podrobněji, protože může provádět mnohem více dokumentů Select-Object.

  • Where-Object. Objekt where vám pomůže vybrat objekty z kolekce na základě hodnot vlastností. Příkaz vezme výraz, ve kterém můžete vyjádřit, jaké sloupce nebo sloupce chcete shodovat s hodnotami. Pokud chcete najít všechny objekty procesu, na kterých ProcessName začíná p, můžete použít Where-Object následující:

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Výše rutina Get-Process vytvoří kolekci procesních objektů. Pokud chcete vyfiltrovat odpověď, předáte příkaz Where-Object. Potrubí znamená, že dva nebo více příkazů jsou propojeny pomocí znaku kanálu | . Myšlenka spočívá v tom, že výstup z jednoho příkazu slouží jako vstup pro další příkaz, jak je přečteno zleva doprava. Výraz Where-Object se používá k filtrování. Výraz používá -like operátor a řetězcový argument obsahující zástupný znak.

Prozkoumání objektů pomocí Get-Member

Jakmile budete moct vyhledat požadovanou rutinu, chcete se dozvědět více o tom, co vytváří, výstupu. Výstup je zajímavý z několika důvodů, například:

  • Samostatná. Můžete spustit jenom jednu rutinu a chcete zobrazit výstup v nějakém druhu sestavy. Otázka, kterou se chcete zeptat, je, jestli příkaz vytvoří výstup, který vám vyhovuje, nebo jestli ho potřebujete změnit.
  • Při použití v kanálu V PowerShellu je běžné připojit několik příkazů v kanálu, načíst data, filtrovat a nakonec je transformovat. Aby se příkaz vešel do kanálu, musíte se podívat, jaký vstup a výstup vytvoří. Myšlenka je, že výstup příkazu se používá jako vstup jiného příkazu.

Rutina Get-Member zobrazí typ, vlastnosti a metody výsledného objektu. Potrubí výstupu, který chcete zkontrolovat Get-Member.

Get-Process | Get-Member

Výsledek zobrazí vrácený typ jako TypeName a pak všechny vlastnosti a metody objektu. Tady je výňatek takového výsledku:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName

Objekt má obvykle spoustu vlastností a metod, abyste snadněji našli to, co hledáte, můžete výsledky filtrovat. Pomocí parametru -MemberTypemůžete zadat například všechny metody, například v následujícím příkladu:

Get-Process | Get-Member -MemberType Method

Když získáte odpověď zpět, PowerShell obvykle zobrazuje jenom několik vlastností. Ve výše uvedené odpovědi NameMemberType byla zobrazena.Definition Chcete-li toto zobrazení změnit, můžete použít rutinu Select-Object. Select-Object umožňuje určit, jaké sloupce chcete zobrazit. Můžete ho zadat buď s názvem sloupce, čárkami odděleným seznamem nebo zástupným znakem *. Tady je příklad, kde Select-Object se používá k načtení Name a Definition:

Get-Process | Get-Member | Select-Object Name, Definition

Hledat podle typu

Dalším způsobem, jak přistupovat k hledání požadovaného příkazu, je vyhledáním příkazů, které všechny fungují na stejném typu. Při použití Get-Memberjste získali vrácený typ jako první řádek odpovědi, například takto:

TypeName: System.Diagnostics.Process

Teď můžete použít tento typ a vyhledat příkazy, jako je například:

Get-Command -ParameterType Process

Výsledek vyvolání výše je seznam s příkazy, které fungují výhradně na Process typu:

CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Jak vidíte, znalost typu příkazu může výrazně zúžit hledání po příkazech, které by pro vás mohly být zajímavé.

Cvičení – volání prvního příkazu

V tomto cvičení se naučíte, jak spustit první příkaz.

  1. Spuštění konzoly PowerShellu zadáním pwsh:

    pwsh
    
  2. Spusťte následující $PSVersionTable.PSVersionpříkaz:

    $PSVersionTable.PSVersion
    

    Výstup vypadá nějak takto:

    Major  Minor  Patch  PreReleaseLabel BuildLabel
    -----  -----  -----  --------------- ----------
    7      1      0
    

    Blahopřejeme, úspěšně jste spustili svůj první příkaz a podařilo se vám získat informace o tom, jakou verzi PowerShellu máte v systému nainstalovanou.

V tomto cvičení je vaším cílem získat další informace o příkazu. V takovém případě najdete také věci, jako je typ, na jakém typu funguje, a na tom, na jakém jiném podobném typu fungují podobné příkazy.

  1. Ujistěte se, že máte spuštěné prostředí PowerShellu.

  2. Spusťte příkaz Get-Process:

    Get-Process | Get-Member | Select-Object TypeName -Unique
    

    Výstup bude vypadat nějak takto:

    TypeName
    --------
    System.Diagnostics.Process
    --------
    

    Co se vracíte zpět, jsou typy vrácené příkazem Get-Command. V tomto okamžiku teď můžete zjistit, jaký jiný příkaz na těchto typech funguje.

  3. Spusťte příkaz Get-Command:

    Get-Command -ParameterType Process
    

    Výstup bude vypadat nějak takto:

    CommandType     Name                         Version    Source
     -----------     ----                        -------    ------
     Cmdlet          Debug-Process               7.0.0.0    Microsoft.PowerShell.Managem…
     Cmdlet          Enter-PSHostProcess         7.1.0.0    Microsoft.PowerShell.Core
     Cmdlet          Get-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
     Cmdlet          Get-PSHostProcessInfo       7.1.0.0    Microsoft.PowerShell.Core
     Cmdlet          Stop-Process                7.0.0.0    Microsoft.PowerShell.Managem…
     Cmdlet          Wait-Process                7.0.0.0    Microsoft.PowerShell.Managem…
    

    Blahopřejeme, podařilo se vám najít další příkazy, které fungují na stejném typu Process. Použití Get-Member je dobrým výchozím bodem, abyste pochopili, jaké další příkazy byste si měli prohlédnout.

Souhrn

V této první části jste se dozvěděli, co je PowerShell a jaké oblasti se dají použít. Kde jste se pak naučili o rutinách a zejména Get-Command, Get-Verb a Get-Member. Znalost těchto rutin je důležitá, protože vás naučí, jak se naučit. V další části se dozvíte, jak používat výkonný systém nápovědy.

Další materiály