Parametry

Dokončeno

Po vytvoření několika skriptů si můžete všimnout, že vaše skripty nejsou flexibilní. Přechod do skriptů, které je změní, není efektivní. Existuje lepší způsob, jak zpracovat změny: použít parametry.

Díky parametrům jsou skripty flexibilní, protože umožňují uživatelům vybrat možnosti nebo odeslat vstup do skriptů. Skripty nebudete muset měnit tak často, protože v některých případech stačí změnit hodnotu parametru.

Rutiny, funkce a skripty přijímají všechny parametry.

Deklarace a použití parametru

Pokud chcete deklarovat parametr, musíte použít klíčové slovo Param s otevřenou a blízkou závorkou:

Param()

V závorkách definujete parametry a oddělíte je čárkami. Typická deklarace parametru může vypadat takto:

# CreateFile.ps1
Param (
  $Path
)
New-Item $Path # Creates a new file at $Path.
Write-Host "File $Path was created"

Skript má $Path parametr, který se později použije ve skriptu k vytvoření souboru. Skript je teď flexibilnější.

Použití parametru

Pokud chcete volat skript s parametrem, musíte zadat název a hodnotu. Předpokládejme, že výše uvedený skript se nazývá CreateFile.ps1. Můžete ho volat takto:

./CreateFile.ps1 -Path './newfile.txt' # File ./newfile.txt was created.
./CreateFile.ps1 -Path './anotherfile.txt' # File ./anotherfile.txt was created.

Protože jste použili parametr, nemusíte měnit soubor skriptu, když chcete volat soubor něco jiného.

Poznámka:

Tento konkrétní skript nemusí být příliš přínosem použití parametru, protože volá New-Itempouze . Jakmile je váš skript dlouhých pár řádků, bude použití parametru platit.

Vylepšení parametrů

Při prvním vytvoření skriptu, který používá parametry, si možná přesně pamatujete, k čemu jsou parametry vhodné a jaké hodnoty jsou pro ně přiměřené. Po uplynutí času můžete tyto podrobnosti zapomenout. Můžete také chtít dát skript kolegovi. Řešením v těchto případech je explicitní, což usnadňuje použití skriptů. Chcete, aby skript selhál dříve, pokud předává nerozumné hodnoty parametrů. Tady je několik věcí, které je potřeba vzít v úvahu při definování parametrů:

  • Je to povinné? Je parametr volitelný nebo povinný?
  • Jaké hodnoty jsou povolené? Jaké hodnoty jsou rozumné?
  • Přijímá více než jeden typ hodnoty? Přijímá parametr nějaký typ hodnoty, jako je řetězec, logická hodnota, celé číslo a objekt?
  • Může se parametr spoléhat na výchozí? Můžete tuto hodnotu úplně vynechat a místo toho spoléhat na výchozí hodnotu?
  • Můžete dále vylepšit uživatelské prostředí? Můžete být pro uživatele ještě jasnější tím, že zadáte zprávu nápovědy?

Výběr přístupu

Všechny parametry jsou ve výchozím nastavení volitelné. Toto výchozí nastavení může v některých případech fungovat, ale někdy potřebujete, aby uživatel zadal hodnoty parametrů a hodnoty musí být rozumné. Pokud uživatel nezadá hodnotu parametru, měl by skript ukončit nebo sdělit uživateli, jak problém vyřešit. Nejhorším scénářem je, aby skript pokračoval a dělal věci, které nechcete udělat.

Existuje několik přístupů, které můžete použít k zajištění větší bezpečnosti skriptu. Můžete napsat vlastní kód pro kontrolu hodnoty parametru. Nebo můžete použít dekorátory, které dělají zhruba totéž. Pojďme se podívat na oba přístupy.

  • Použití.If/Else Konstruktor If/Else umožňuje zkontrolovat hodnotu parametru a pak rozhodnout, co dělat. Tady je příklad:

    Param(
       $Path
    )
    If (-Not $Path -eq '') {
       New-Item $Path
       Write-Host "File created at path $Path"
    } Else {
       Write-Error "Path cannot be empty"
    } 
    

    Skript se spustíWrite-Error, pokud nezadáte hodnotu .$Path

  • Parameter[] Použijte dekorátor. Lepší způsob, který vyžaduje méně psaní, je použít Parameter[] dekorátor:

    Param(
       [Parameter(Mandatory)]
       $Path
    )
    New-Item $Path
    Write-Host "File created at path $Path"
    

    Pokud tento skript spustíte a vynecháte hodnotu , $Pathskončíte v dialogovém okně s výzvou k zadání hodnoty:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    Path:
    

    Tento dekorátor můžete vylepšit poskytnutím zprávy nápovědy, která se uživatelům zobrazí při spuštění skriptu:

    [Parameter(Mandatory, HelpMessage = "Please provide a valid path")]
    

    Při spuštění skriptu se zobrazí zpráva s informací, že chcete zadat !? další informace:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Path: !?  # You type !?
    Please provide a valid path  # Your Help message.
    
  • Přiřaďte typ. Pokud přiřadíte typ parametru, můžete například říci, že parametr přijímá pouze řetězce, nikoli logické hodnoty. Uživatel tak ví, co má očekávat. Typ můžete k parametru přiřadit tak, že před ním zadáte typ uzavřený v hranatých závorkách:

    Param(
       [string]$Path
    )
    

Tyto tři přístupy se vzájemně nevylučují. Můžete je zkombinovat, aby byl skript bezpečnější.