about_Script_Blocks

Rövid leírás

Meghatározza, hogy mi az a szkriptblokk, és elmagyarázza, hogyan használhatók a szkriptblokkok a PowerShell programozási nyelvben.

Hosszú leírás

A PowerShell programozási nyelvben a szkriptblokk olyan utasítások vagy kifejezések gyűjteménye, amelyek egyetlen egységként használhatók. A szkriptblokkok argumentumokat fogadnak el, és értékeket adnak vissza.

A szkriptblokkok szintaktikailag egy kapcsos utasításlista, ahogyan az a következő szintaxisban látható:

{<statement list>}

A szkriptblokk a szkriptblokk összes parancsának kimenetét adja vissza egyetlen objektumként vagy tömbként.

A kulcsszóval return visszatérési értéket is megadhat. A return kulcsszó nem befolyásolja vagy letiltja a szkriptblokkból visszaadott egyéb kimeneteket. A return kulcsszó azonban kilép a szkriptblokkból az adott sorban. További információ: about_Return.

A függvényekhez hasonlóan a szkriptblokkok is tartalmazhatnak paramétereket. A Param kulcsszóval névvel ellátott paramétereket rendelhet hozzá az alábbi szintaxis szerint:

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

Megjegyzés

A szkriptblokkokban a függvényekkel ellentétben nem adhat meg paramétereket a kapcsos zárójeleken kívül.

A függvényekhez hasonlóan a szkriptblokkok is tartalmazhatják a DynamicParam, Begin, Processés End kulcsszavakat. További információ: about_Functions és about_Functions_Advanced.

Szkriptblokkok használata

A szkriptblokk egy Microsoft .NET-keretrendszer típusú System.Management.Automation.ScriptBlockpéldány. A parancsok szkriptblokk paraméterértékekkel is rendelkezhetnek. A parancsmag például rendelkezik egy ScriptBlock paraméterrel, Invoke-Command amely egy szkriptblokk értékét veszi fel, ahogyan az a példában látható:

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 A paraméterblokkokat tartalmazó szkriptblokkokat is képes végrehajtani. A paraméterek pozíciónként vannak hozzárendelve az ArgumentList paraméterrel.

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

Az előző példában szereplő szkriptblokk a param kulcsszó használatával hoz létre paramétereket $p1 és $p2. Az "Első" sztring az első paraméterhez ($p1) van kötve, a "Második" pedig ($p2).

Az Argumentumlista működésével kapcsolatos további információkért lásd: about_Splatting.

A szkriptblokkok tárolására és végrehajtására változók használhatók. Az alábbi példa egy szkriptblokkot tárol egy változóban, és átadja a változónak Invoke-Command.

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

A híváskezelő egy másik módja a változókban tárolt szkriptblokkok végrehajtásának. A híváskezelő például Invoke-Commandegy gyermekhatókörben hajtja végre a szkriptblokkot. A híváskezelő megkönnyíti a paraméterek használatát a szkriptblokkokkal.

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

A szkriptblokkok kimenetét egy változóban, hozzárendeléssel tárolhatja.

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

További információ a híváskezelőről: about_Operators.

Delay-bind szkriptblokkok használata paraméterekkel

A folyamatbemenetet () vagy (by Valueby PropertyName) elfogadó gépelt paraméter lehetővé teszi a delay-bind szkriptblokkok használatát a paraméteren. A delay-bind szkriptblokkon belül hivatkozhat az objektumban lévő csőre a folyamatváltozó $_használatával.

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

Az összetettebb parancsmagokban a késleltetési kötés szkriptblokkjai lehetővé teszik az objektumban lévő egyik cső újbóli felhasználását más paraméterek feltöltéséhez.

Megjegyzések a delay-bind szkriptblokkokról paraméterként:

  • Explicit módon meg kell adnia a delay-bind szkriptblokkokkal használt paraméterneveket.

  • A paraméter nem lehet begépeletlen, és a paraméter típusa nem lehet vagy [object]nem lehet[scriptblock].

  • Hibaüzenet jelenik meg, ha késleltetési kötésű szkriptblokkot használ folyamatbemenet megadása nélkül.

    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
    

Lásd még