Mnoho ľudí rád používa PowerShell , pretože im umožňuje robiť veci, ktoré sa nedajú robiť s GUI systému Windows. Napriek tomu nemožno poprieť, že niektoré rutiny cmdlet PowerShell môžu byť trochu únavné alebo komplikované. Čo ak však existuje spôsob, ako tieto rutiny cmdlet upravovať a prinútiť ich, aby sa „správali“ tak, ako chcete? Verte tomu alebo nie, existuje jednoduchý spôsob, ako to urobiť. Správanie rutiny cmdlet môžete zmeniť úpravou hodnôt predvolených parametrov prostredia PowerShell. Tento článok vám ukáže, ako použiť predvolené parametre PowerShell na zmenu správania príkazu cmdlet.
POZOR
Než začnete, je potrebné mať na pamäti niekoľko vecí. Hoci je zmena predvolených parametrov prostredia PowerShell a správania cmdelt pohodlná, môže viesť k problémom. Ak spustíte skript a tento skript predpokladá, že upravený cmdlet sa bude správať určitým spôsobom, môžete získať nepredvídateľné výsledky. Preto by ste mali starostlivo zmeniť predvolené parametre PowerShell.
Rýchla recenzia
Existujú dva koncepty PowerShell, s ktorými sa musíte oboznámiť, aby ste mohli pracovať s predvolenými parametrami. Prvý koncept je variabilný. V PowerShell názvy premenných vždy začínajú znakom dolára a obsah premennej môžete napísať zadaním názvu premennej.
Druhý koncept, ktorý možno poznáte, je hašovacia tabuľka. Hašovacia tabuľka je v podstate zoznam vytvorený z párov kľúč/hodnota. Predpokladajme napríklad, že chcete vytvoriť hašovaciu tabuľku obsahujúcu názvy štátov USA a ich skratky. Nižšie je uvedený kód:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('South Carolina','SC')
$StateList.add('Georgia','GA')
$StateList
Prvý riadok kódu vytvorí prázdnu hašovaciu tabuľku s názvom $StateList . Nasledujúce tri riadky pridávajú položky do tabuľky. Každý záznam sa skladá z kľúča (názov štátu) a hodnoty (skratka štátu). V poslednom riadku je uvedený obsah tabuľky. Kód v akcii môžete vidieť na obrázku nižšie.
Toto je len veľmi jednoduchý príklad a existuje mnoho ďalších spôsobov použitia hašovacích tabuliek.
Pracujte s predvolenými parametrami prostredia PowerShell
PowerShell má vstavanú premennú, ktorá sa používa na ukladanie predvolených parametrov používaných s jeho cmdletmi. Táto premenná sa nazýva $PSDefaultParameterValues . Ako ste si mohli všimnúť z úvodného predstavenia a názvu premennej, nejde o obyčajnú premennú, ale o hašovaciu tabuľku. Ak však zadáte názov premennej do PowerShell, rýchlo uvidíte, že tabuľka je prázdna, ako je uvedené nižšie.

Čo teda môžeme robiť s touto premennou $PSDefaultParameterValues . Ako je uvedené vyššie, môžete ovládať správanie cmdletov PowerShell. Jediným bodom je, že nemôžete prekonať vlastné schopnosti príkazu cmdlet. Pozrime sa teda na príklad.
Tento príklad nemusí byť niečo, čo by ste chceli použiť v reálnom živote, ale ukáže vám, aké ľahké je radikálne zmeniť správanie cmdlet. Ak zadáte cmdlet Get-TimeZone v prostredí PowerShell, zobrazí sa názov časového pásma, na ktoré je váš počítač momentálne nakonfigurovaný. Tento príklad môžete vidieť na obrázku nižšie.

Teraz túto rutinu cmdlet zmeníme tak, aby nezobrazovala časové pásmo, na ktoré je systém nakonfigurovaný, ale dostupné časové pásma. Na to potrebujeme syntax cmdlet pomocou cmdlet Get-Help, za ktorým nasleduje cmdlet Get-TimeZone . Nižšie môžete vidieť syntax rutiny cmdlet.

Táto syntax obsahuje parameter s názvom ListAvailable . Zadajte príkaz nižšie:
$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)
Prvá časť tohto príkazu jednoducho povie PowerShellu, že chcete pridať hodnotu do hašovacej tabuľky, rovnako ako sme to urobili s príkladom skratky štátu USA v predchádzajúcej časti. Táto hašovacia tabuľka obsahuje pár kľúč/hodnota. V tomto prípade je kľúčom názov cmdlet (Get-TimeZone), za ktorým nasleduje čiarka a názov parametra, ktorý chcete nastaviť. V tomto prípade je názov parametra ListAvailable. Druhá časť tejto rutiny cmdlet je hodnota, ktorú chcete parametru priradiť. Tu je $True . Parameter ListAvailable za normálnych okolností nepotrebuje hodnotu, takže zadanie $True je spôsob, akým poviete PowerShellu, aby použil tento parameter bez priradenia hodnoty.
Ak sa pozriete na obrázok nižšie, uvidíte, čo sa stane, keď spustíte cmdlet Get-TimeZone.

Na čo treba pamätať
Najdôležitejšie je pochopiť, že pridanie novej hodnoty do predvoleného parametra prostredia PowerShell znamená zmeniť predvolené správanie rutiny cmdlet, nie odstrániť možnosti rutiny cmdlet. Dokonca aj vtedy, keď zmeníte cmdlet Get-TimeZone tak, aby zobrazoval dostupné časové pásma namiesto zobrazenia aktuálneho časového pásma. Ak si prezeráte viac, stále môžete zobraziť informácie o aktuálnom časovom pásme.
Ďalšia vec, ktorú potrebujete vedieť, je, že vlastné predvolené parametre je možné odstrániť. Ak chcete odstrániť jednu položku, použite príkaz $PSDefaultParameterValues.Remove , za ktorým nasleduje názov položky, ktorú chcete odstrániť. Napríklad:
$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)
Namiesto toho môžete odstrániť celý obsah hašovacej tabuľky pomocou tohto príkazu:
$PSDefaultParameterValues.Clear();
Príklady oboch techník si môžete pozrieť nižšie:

Môžete vymazať celú hašovaciu tabuľku alebo vymazať jeden záznam.
Zmena predvoleného správania príkazu cmdlet je niečo, čo nerobíte často, ale keď to potrebujete, už viete, ako to zmeniť.
Prajem vám úspech!
Pozrieť viac: