Úvod do skriptování

Dokončeno

Skriptování PowerShellu je proces zápisu sady příkazů v jazyce PowerShellu a uložení těchto příkazů do textového souboru. Proč bys to udělal? Po použití PowerShellu na chvíli zjistíte, že opakujete určité úlohy, jako je vytváření sestav protokolů nebo správa uživatelů. Když něco často opakujete, je pravděpodobně vhodné ho automatizovat: uložit ho takovým způsobem, který usnadňuje opakované použití.

Postup automatizace úlohy obvykle zahrnuje volání rutin, funkcí, proměnných a dalších. Pokud chcete tyto kroky uložit, vytvoříte soubor, který končí.ps1, a uložíte ho. Pak máte skript, který můžete spustit.

Než se začnete učit skriptovat, pojďme získat přehled o funkcích skriptovacího jazyka PowerShellu:

  • Proměnné. K ukládání hodnot můžete použít proměnné. Proměnné můžete také použít jako argumenty pro příkazy.

  • Functions. Funkce je pojmenovaný seznam příkazů. Funkce vytvoří výstup, který se zobrazí v konzole. Funkce můžete použít také jako vstup pro jiné příkazy.

    Poznámka:

    Mnoho úloh, pro které byste použili PowerShell, jsou vedlejší účinky nebo úpravy stavu systému (místní nebo jiné). Výstup je často sekundárním ohledem (jako například vykazování dat).

  • Řízení toku Řízení toku je způsob, jakým řídíte různé cesty provádění pomocí konstrukcí, jako If, ElseIf a Else.

  • Smyčky. Smyčky jsou konstrukce, které umožňují pracovat s poli, kontrolovat jednotlivé položky a provádět určité operace u každé položky. Smyčky jsou ale o více než iteraci pole. Můžete také podmíněně pokračovat v běhu smyčky pomocí Do-While smyček. Další informace naleznete v tématu O aplikaci Do.

  • Zpracování chyb Je důležité psát skripty, které jsou robustní a dokážou zpracovávat různé typy chyb. Potřebujete znát rozdíl mezi ukončováním a neterminačními chybami. Používáte konstruktory jako Try a Catch. Toto téma probereme v poslední koncepční lekci tohoto modulu.

  • Výrazy. Výrazy často používáte ve skriptech PowerShellu. Pokud například chcete vytvořit vlastní sloupce nebo vlastní výrazy řazení. Výrazy představují reprezentaci hodnot v syntaxi PowerShellu.

  • Integrace .NET a .NET Core PowerShell poskytuje výkonnou integraci s .NET a .NET Core. Tato integrace je nad rámec tohoto modulu.

Spuštění skriptu

Musíte vědět, že některé skripty nejsou bezpečné. Pokud najdete skript na internetu, pravděpodobně byste ho neměli spouštět na počítači, pokud nerozumíte přesně tomu, co dělá. I u skriptů, které považujete za bezpečné, může existovat riziko. Představte si například skript, který vyčistí věci v testovacím prostředí. Tento skript může být v produkčním prostředí škodlivý. Potřebujete pochopit, co skript dělá, ať už jste ho napsali vy nebo kolega nebo jestli jste ho získali z internetu.

PowerShell se vás pokusí chránit před neúmyslným prováděním věcí dvěma hlavními způsoby:

  • Požadavek na spouštění skriptů pomocí absolutní nebo relativní cesty. Při spuštění skriptu musíte vždy zadat cestu ke skriptu. Poskytnutí cesty vám pomůže přesně zjistit, co spouštíte. V počítači můžete například mít příkazy a aliasy, které nechcete spustit, ale mají stejný název jako váš skript. Zahrnutím cesty si zajistíte dodatečnou kontrolu, která vám poskytne jistotu, že budete spouštět přesně to, co chcete.
  • Zásady provádění. Politika provádění je bezpečnostní funkce. Stejně jako vyžadování cesty ke skriptu vám politika může zabránit v neúmyslných činech. Zásady můžete nastavit na různých úrovních, jako je místní počítač, aktuální uživatel nebo konkrétní relace. Nastavení zásad skupiny můžete také použít k nastavení zásad spouštění pro počítače a uživatele.

Tyto dva mechanismy nezastaví otevření souboru, kopírování jeho obsahu, umístění obsahu do textového souboru a spuštění souboru. Nezastaví vás také ve spuštění kódu prostřednictvím konzoly. Tyto mechanismy vám pomohou zabránit tomu, abyste něco neúmyslně dělali. Nejsou to bezpečnostní systém.

Vytvoření a spuštění skriptu:

  1. Vytvořte některé příkazy PowerShellu jako následující a uložte je do souboru, který končí na .ps1:

    # PI.ps1
    $PI = 3.14
    Write-Host "The value of `$PI is $PI"
    
  2. Spusťte skript vyvoláním jeho názvu a cesty:

    Poznámka:

    Než skript spustíte, ujistěte se, že aktuální prostředí je PowerShell. Alternativně můžete v Linuxu nebo macOS umístit shebang na začátek souboru skriptu a definovat PowerShell jako interpret skriptu.

    ./PI.ps1
    

    Doporučujeme zahrnout příponu souboru do vyvolání, ale není to povinné.

Zásada provádění

Zásady spouštění můžete spravovat pomocí těchto rutin:

  • Get-ExecutionPolicy. Tato cmdlet vrátí aktuální zásady spuštění. Na Linuxu a macOS je vrácená hodnota Unrestricted. U těchto operačních systémů nemůžete hodnotu změnit. Toto omezení neznamená, že Linux nebo Mac jsou méně bezpečné. Nezapomeňte, že zásady spouštění jsou bezpečnostní funkce, nikoli bezpečnostní mechanismus.

  • Set-ExecutionPolicy. Pokud používáte počítač s Windows, můžete pomocí této rutiny změnit hodnotu zásad spouštění. Přebírá -ExecutionPolicy parametr. Existuje několik možných hodnot. Jako hodnotu je vhodné použít Default. Tato hodnota nastaví zásadu na Restricted na klientech Windows a RemoteSigned na serverech Windows. Restricted znamená, že nemůžete spouštět skripty. Můžete spouštět jenom příkazy, které dává smysl pro klienta. RemoteSigned znamená, že skripty napsané na místním počítači lze spustit. Skripty stažené z internetu musí být podepsané digitálním podpisem od důvěryhodného vydavatele.

    Poznámka:

    Existují další hodnoty, které můžete použít. Další informace najdete v tématu o zásadách spouštění.

Proměnné

Proměnné nejsou jen pro skripty. Můžete je také definovat v konzole. Hodnoty můžete uložit do proměnných, abyste je mohli později použít. Chcete-li definovat proměnnou, předejte znak $. Tady je příklad:

$PI = 3.14

Práce s proměnnými: Uvozovky a interpolace

Při výstupu textu můžete Write-HostWrite-Outputpoužít jednoduché nebo dvojité uvozovky. Vaše volba závisí na tom, jestli chcete hodnoty interpolovat. Existují tři mechanismy, o kterých byste měli vědět:

  • Jednoduché uvozovky. Jednoduché uvozovky určují literály; co píšete, je to, co dostanete. Tady je příklad:

    Write-Host 'Here is $PI' # Prints Here is $PI
    

    Pokud chcete interpolovat – abyste získali hodnotu $PI interpretované a vytištěné – musíte použít dvojité uvozovky.

  • Dvojité uvozovky. Při použití dvojitých uvozovek se proměnné v řetězcích interpolují:

    Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14
    

    Tady se chystají dvě věci. Zpětný apostrof (`) umožňuje vyhnout se interpolaci prvního výskytu $PI. Ve druhé instanci se hodnota interpoluje a zapíše se.

  • $(). Výraz můžete také napsat do dvojitých uvozovek. K tomu použijte $() konstruktor. Jedním ze způsobů použití tohoto konstruktoru je interpolace vlastností objektů. Tady je příklad:

    Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
    

Obor

Obor je způsob, jakým PowerShell definuje, kde se dají číst a měnit konstrukty, jako jsou proměnné, aliasy a funkce. Když se učíte psát skripty, potřebujete vědět, k čemu máte přístup, co můžete změnit a kde ho můžete změnit. Pokud nerozumíte tomu, jak obor funguje, nemusí váš kód fungovat podle očekávání.

Typy rozsahu

Promluvme si o různých oborech:

  • Globální obor. Při vytváření konstruktů, jako jsou proměnné v tomto rozsahu, budou pokračovat v existenci i po skončení vaší relace. Cokoli, co je k dispozici při spuštění nové relace PowerShellu, lze říci, že je v tomto rozsahu.

  • Rozsah skriptu. Když spustíte soubor skriptu, vytvoří se obor skriptu. Například proměnná nebo funkce definovaná v souboru jsou v oboru skriptu. Po dokončení spuštění souboru už nebude existovat. Můžete například vytvořit proměnnou v souboru skriptu a cílit na globální obor. Tento obor ale musíte explicitně definovat tak, že předzálohujete proměnnou pomocí klíčového global slova.

  • Místní obor. Místní obor je aktuální obor a může to být globální obor nebo jakýkoli jiný obor.

Pravidla rozsahu

Pravidla oboru pomáhají chápat, jaké hodnoty jsou zřejmé v daném bodě. Pomáhají vám také pochopit, jak změnit hodnotu.

  • Obory můžou vnořit. Rozsah může mít nadřazený rozsah. Nadřazený obor je vnější obor, vně oboru, ve kterém se nacházíte. Místní obor může mít například globální obor jako nadřazený obor. Obor může mít naopak vnořený obor, označovaný také jako podřízený obor.

  • Položky jsou viditelné v aktuálních oborech a v podřízených oborech. Položka, jako je proměnná nebo funkce, je viditelná v oboru, ve kterém je vytvořena. Ve výchozím nastavení je také viditelný v podřízených oborech. Toto chování můžete změnit tak, že položku v rámci oboru změníte jako soukromou. Tady je příklad, který používá proměnnou definovanou v konzole:

    $test = 'hi'
    

    Pokud máte souborScript.ps1 , který obsahuje následující obsah, při spuštění skriptu se vytiskne "hi":

    Write-Host $test # Prints hi
    

    Vidíte, že proměnná $test je viditelná jak v místním oboru, tak v podřízené oblasti, v tomto případě v oboru skriptu.

  • Položky lze změnit pouze v vytvořeném oboru. Ve výchozím nastavení můžete položku změnit pouze v oboru, ve kterém byla vytvořena. Toto chování můžete změnit explicitním zadáním jiného rozsahu.

Profily

Profil je skript, který se spustí při spuštění PowerShellu. Profil můžete použít k přizpůsobení prostředí, například ke změně barev pozadí a chyb a k dalším typům přizpůsobení. PowerShell tyto změny použije u každé nové relace, kterou spustíte.

Typy profilů

PowerShell podporuje několik souborů profilu. Můžete je použít na různých úrovních, jak vidíte tady:

Popis Cesta
Všichni uživatelé, všichni hostitelé $PSHOME\Profile.ps1
Všichni uživatelé, aktuální hostitel $PSHOME\Microsoft.PowerShell_profile.ps1
Aktuální uživatel, všichni hostitelé $Home[Moje ]Dokumenty\PowerShell\Profile.ps1
Aktuální uživatel, aktuální hostitel $Home[Moje ]Dokumenty\PowerShell\Microsoft.PowerShell_profile.ps1

Existují dvě proměnné: $PSHOME a $Home. $PSHOME odkazuje na instalační adresář pro PowerShell. $Home je domovský adresář aktuálního uživatele.

Další programy také podporují profily, jako je Visual Studio Code.

Vytvoření profilu

Při první instalaci PowerShellu nejsou žádné profily, ale existuje proměnná $Profile . Je to objekt, který odkazuje na cestu, kam má být každý profil umístěn pro použití. Vytvoření profilu:

  1. Rozhodněte úroveň, na které chcete profil vytvořit. Můžete spustit $Profile | Select-Object * pro zobrazení typů profilů a cest s nimi spojených.

  2. Vyberte typ profilu a vytvořte textový soubor v jeho umístění pomocí příkazu, jako je tento: New-Item -Path $Profile.CurrentUserCurrentHost.

  3. Přidejte vlastní nastavení do textového souboru a uložte ho. Při příštím spuštění relace se změny použijí.