Parametry
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-Item
pouze . 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
KonstruktorIf/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žítParameter[]
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 ,
$Path
skončí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ší.