Mnoho lidí rádo používá PowerShell , protože jim umožňuje dělat věci, které nelze dělat s GUI Windows. Přesto nelze popřít, že některé rutiny PowerShellu mohou být trochu zdlouhavé nebo složité. Ale co kdyby existoval způsob, jak tyto rutiny upravovat a přimět je, aby se „chovaly“ tak, jak chcete? Věřte tomu nebo ne, existuje snadný způsob, jak to udělat. Chování rutiny můžete změnit úpravou hodnot výchozích parametrů prostředí PowerShell. Tento článek vám ukáže, jak pomocí výchozích parametrů PowerShellu změnit chování příkazu cmdlet.
Varování
Než začnete, je třeba mít na paměti několik věcí. Ačkoli je změna výchozích parametrů PowerShellu a chování cmdelt pohodlná, může vést k problémům. Pokud spustíte skript a tento skript předpokládá, že se upravená rutina bude chovat určitým způsobem, můžete získat nepředvídatelné výsledky. Proto byste měli pečlivě měnit výchozí parametry PowerShellu.
Rychlá recenze
Existují dva koncepty prostředí PowerShell, které musíte znát, abyste mohli pracovat s výchozími parametry. První koncept je variabilní. V PowerShellu začínají názvy proměnných vždy znakem dolaru a obsah proměnné můžete napsat zadáním názvu proměnné.
Druhý koncept, který možná znáte, je hashovací tabulka. Hašovací tabulka je v podstatě seznam složený z párů klíč/hodnota. Předpokládejme například, že chcete vytvořit hašovací tabulku obsahující názvy států USA a jejich zkratky. Níže je uveden kód:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('South Carolina','SC')
$StateList.add('Georgia','GA')
$StateList
První řádek kódu vytvoří prázdnou hashovací tabulku s názvem $StateList . Další tři řádky přidávají položky do tabulky. Každá položka se skládá z klíče (název stavu) a hodnoty (zkratka stavu). Poslední řádek uvádí obsah tabulky. Kód v akci můžete vidět na obrázku níže.
Toto je jen velmi jednoduchý příklad a existuje mnoho dalších způsobů, jak použít hashovací tabulky.
Práce s výchozími parametry PowerShellu
PowerShell má vestavěnou proměnnou, která se používá k ukládání výchozích parametrů používaných s jeho rutinami. Tato proměnná se nazývá $PSDefaultParameterValues . Jak jste si mohli všimnout z úvodního představení a názvu proměnné, nejedná se o obyčejnou proměnnou, ale o hashovací tabulku. Pokud však zadáte název proměnné do PowerShellu, rychle uvidíte, že tabulka je prázdná, jak je znázorněno níže.

Co tedy můžeme dělat s touto proměnnou $PSDefaultParameterValues . Jak bylo uvedeno výše, můžete ovládat chování rutin PowerShell. Jediným bodem je, že nemůžete překonat přirozené schopnosti příkazu cmdlet. Podívejme se tedy na příklad.
Tento příklad nemusí být něco, co byste chtěli použít v reálném životě, ale ukáže vám, jak snadné je radikálně změnit chování cmdlet. Pokud v PowerShellu zadáte rutinu Get-TimeZone , zobrazí se název časového pásma, pro které je váš počítač aktuálně nakonfigurován. Tento příklad můžete vidět na obrázku níže.

Nyní tuto rutinu změníme tak, aby nezobrazovala časové pásmo, pro které je systém nakonfigurován, ale dostupná časová pásma. K tomu potřebujeme syntaxi rutiny pomocí rutiny Get-Help následované rutinou Get-TimeZone . Níže můžete vidět syntaxi rutiny.

Tato syntaxe obsahuje parametr nazvaný ListAvailable . Zadejte příkaz níže:
$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)
První část tohoto příkazu jednoduše říká PowerShellu, že chcete přidat hodnotu do hash tabulky, stejně jako jsme to udělali s příkladem zkratky státu USA v předchozí části. Tato hashovací tabulka obsahuje pár klíč/hodnota. V tomto případě je klíčem název rutiny (Get-TimeZone) následovaný čárkou a názvem parametru, který chcete nastavit. V tomto případě je název parametru ListAvailable. Druhá část této rutiny je hodnota, kterou chcete parametru přiřadit. Tady je $True . Parametr ListAvailable normálně nepotřebuje hodnotu, takže zadáním $True sdělíte PowerShellu, aby tento parametr použil, aniž byste mu přiřadili hodnotu.
Pokud se podíváte na obrázek níže, uvidíte, co se stane, když spustíte rutinu Get-TimeZone.

Věci, které je třeba mít na paměti
Nejdůležitější je pochopit, že přidáním nové hodnoty výchozího parametru PowerShellu se změní výchozí chování rutiny, nikoli odebrání možností rutiny. I když změníte rutinu Get-TimeZone tak, aby zobrazovala dostupná časová pásma místo aktuálního časového pásma. Pokud zobrazíte více, můžete stále zobrazit informace o aktuálním časovém pásmu.
Další věc, kterou potřebujete vědět, je, že vlastní výchozí parametry lze odstranit. Chcete-li odebrat jednu položku, použijte příkaz $PSDefaultParameterValues.Remove , za kterým následuje název položky, kterou chcete odstranit. Například:
$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)
Místo toho můžete odstranit celý obsah hash tabulky pomocí tohoto příkazu:
$PSDefaultParameterValues.Clear();
Níže můžete vidět příklady obou technik:

Můžete smazat celou hashovací tabulku nebo odstranit jeden záznam.
Změna výchozího chování příkazu cmdlet je něco, co neděláte často, ale když to potřebujete, už víte, jak to změnit.
Přeji vám úspěch!
Vidět víc: