about_Script_Blocks
Rövid leírás
Meghatározza, hogy mi az a szkriptblokk, és elmagyarázza, hogyan használhat szkriptblokkokat a PowerShell programozási nyelvben.
Hosszú leírás
A PowerShell programozási nyelvben a szkriptblokkok olyan utasítások vagy kifejezések gyűjteményei, amelyek egyetlen egységként használhatók. Az utasítások gyűjteménye kapcsos zárójelekben ({}
függvényként definiálva) vagy szkriptfájlban menthető. A szkriptblokkok értékeket adnak vissza, és paramétereket és argumentumokat fogadnak el.
A szkriptblokkok szintaktikailag egy kapcsos utasításlista, ahogyan az a következő szintaxisban is 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 nem tiltja le a szkriptblokkból visszaadott egyéb kimeneteket. A return
kulcsszó azonban kilép a szkriptblokkból ezen a sorban. További információ: about_Return.
A függvényekhez hasonlóan a szkriptblokkok is tartalmazhatnak paramétereket. A Param kulcsszóval elnevezett paramétereket rendelhet hozzá, ahogy az a következő szintaxisban is látható:
{
Param([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
Feljegyzés
Egy szkriptblokkban 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.ScriptBlock
pé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 ebben 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
paraméterblokkokat tartalmazó szkriptblokkokat is végrehajthat.
A paraméterek hely szerint 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ódszer a változóban tárolt szkriptblokkok végrehajtására.
A híváskezelő például Invoke-Command
egy 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
A híváskezelőről további információt a about_Operators talál.
Késleltetett kötésű szkriptblokkok használata paraméterekkel
A folyamatbemenetet elfogadó gépelt paraméter lehetővé teszi a delay-bind szkriptblokkok használatát a paraméteren. A késleltetett kötésű szkriptblokkokat rövidítésként használhatja a folyamatalapú parancsmag paramétereinek definiálásához a végrehajtás előtt.
A delay-bind szkriptblokkon belül hivatkozhat az objektumban lévő csőre a folyamatváltozó $_
használatával.
# Both examples rename config.log to old_config.log
# Without delay-binding
dir config.log | ForEach-Object -Process {
Rename-Item -Path $_ -NewName "old_$($_.Name)"
}
# With delay-binding
dir config.log | Rename-Item -NewName { "old_$($_.Name)" }
Összetettebb parancsmagokban a késleltetett kötésű szkriptblokkok lehetővé teszik az objektumban lévő egy cső újrahasználatá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 beíratlan, és a paraméter típusa nem lehet
[scriptblock]
vagy[object]
nem.Hibaüzenet jelenik meg, ha folyamatbemenet megadása nélkül használ késleltetési kötésű szkriptblokkot.
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