about_Script_Blocks

Krátký popis

Definuje, co je blok skriptu, a vysvětluje, jak používat bloky skriptů v programovacím jazyce PowerShellu.

Dlouhý popis

V programovacím jazyce PowerShellu je blok skriptu kolekcí příkazů nebo výrazů, které lze použít jako jednu jednotku. Blok skriptu může přijímat argumenty a vracet hodnoty.

Blok skriptu je syntakticky seznam příkazů ve složených závorkách, jak je znázorněno v následující syntaxi:

{<statement list>}

Blok skriptu vrátí výstup všech příkazů v bloku skriptu, a to buď jako jeden objekt, nebo jako pole.

Návratovou hodnotu můžete zadat také pomocí klíčového return slova. Klíčové return slovo nemá vliv ani nepotlačí jiný výstup vrácený z bloku skriptu. Klíčové return slovo však ukončí blok skriptu na daném řádku. Další informace najdete v tématu about_Return.

Podobně jako funkce může blok skriptu obsahovat parametry. Pomocí klíčového slova Param přiřaďte pojmenované parametry, jak je znázorněno v následující syntaxi:

{
Param([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}

Poznámka

V bloku skriptu na rozdíl od funkce nemůžete zadat parametry mimo závorky.

Podobně jako funkce můžou bloky skriptů obsahovat klíčová DynamicParamslova , Begin, Processa End klíčová slova. Další informace najdete v tématu about_Functions a about_Functions_Advanced.

Použití bloků skriptů

Blok skriptu je instance typu System.Management.Automation.ScriptBlockMicrosoft .NET Framework . Příkazy můžou mít hodnoty parametrů bloku skriptu. Například rutina má ScriptBlock parametr, Invoke-Command který přebírá hodnotu bloku skriptu, jak je znázorněno v tomto příkladu:

Invoke-Command -ScriptBlock { Get-Process }
Handles  NPM(K)    PM(K)     WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----     ----- -----   ------     -- -----------
999          28    39100     45020   262    15.88   1844 communicator
721          28    32696     36536   222    20.84   4028 explorer
...

Invoke-Command může také spouštět bloky skriptu, které mají bloky parametrů. Parametry jsou přiřazeny umístěním pomocí parametru ArgumentList .

Invoke-Command -ScriptBlock { param($p1, $p2)
"p1: $p1"
"p2: $p2"
} -ArgumentList "First", "Second"
p1: First
p2: Second

Blok skriptu v předchozím příkladu param používá klíčové slovo k vytvoření parametrů $p1 a $p2. Řetězec "First" je vázán na první parametr ($p1) a "Second" je vázán na ($p2).

Další informace o chování ArgumentList naleznete v tématu about_Splatting.

Proměnné můžete použít k ukládání a spouštění bloků skriptů. Následující příklad uloží blok skriptu do proměnné a předá ho .Invoke-Command

$a = { Get-Service BITS }
Invoke-Command -ScriptBlock $a
Status   Name               DisplayName
------   ----               -----------
Running  BITS               Background Intelligent Transfer Ser...

Operátor volání je dalším způsobem, jak spouštět bloky skriptů uložené v proměnné. Podobně jako Invoke-Commandoperátor volání spustí blok skriptu v podřízeného oboru. Operátor volání vám může usnadnit použití parametrů s bloky skriptu.

$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First

Výstup z bloků skriptu můžete uložit do proměnné pomocí přiřazení.

PS>  $a = { 1 + 1}
PS>  $b = &$a
PS>  $b
2
PS>  $a = { 1 + 1}
PS>  $b = Invoke-Command $a
PS>  $b
2

Další informace o operátoru volání najdete v tématu about_Operators.

Použití bloků skriptu s vazbou zpoždění s parametry

Zadaný parametr, který přijímá vstup kanálu (by Value) nebo (by PropertyName) umožňuje použití bloků skriptu s vazbou zpoždění na parametru. V bloku skriptu s vazbou zpoždění můžete odkazovat na kanál v objektu pomocí proměnné $_kanálu .

# Renames config.log to old_config.log
dir config.log | Rename-Item -NewName {"old_" + $_.Name}

V složitějších rutinách bloky skriptu s vazbou zpoždění umožňují opakované použití jednoho kanálu v objektu k naplnění dalších parametrů.

Poznámky k blokům skriptu se zpožděním vazby jako parametrů:

  • Je nutné explicitně zadat všechny názvy parametrů, které používáte s bloky skriptu se zpožděním vazby .

  • Parametr nesmí být nezatypovaný a typ parametru nemůže být [scriptblock] nebo [object].

  • Pokud použijete blok skriptu s vazbou zpoždění bez zadání vstupu kanálu, zobrazí se chyba.

    Rename-Item -NewName {$_.Name + ".old"}
    
    Rename-Item : Cannot evaluate parameter 'NewName' because its argument is
    specified as a script block and there is no input. A script block cannot
    be evaluated without input.
    At line:1 char:23
    +  Rename-Item -NewName {$_.Name + ".old"}
    +                       ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : MetadataError: (:) [Rename-Item],
          ParameterBindingException
        + FullyQualifiedErrorId : ScriptBlockArgumentNoInput,
          Microsoft.PowerShell.Commands.RenameItemCommand
    

Viz také