Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Meghatározza, hogy mi a szkriptblokk, és elmagyarázza, hogyan használható 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. Az utasítások gyűjteménye kapcsos zárójelekbe ({}), függvényként definiálva, vagy szkriptfájlba menthető. A szkriptblokkok értékeket adnak vissza, és paramétereket és argumentumokat fogadnak el. A szkriptblokkok új hatókört hoznak létre a változókhoz.
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 return kulcsszóval is megadhat visszatérési értéket. 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 rendeljen hozzá elnevezett paramétereket, ahogyan az az alábbi szintaxisban is látható:
{
param ([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
A függvényekhez hasonlóan a szkriptblokkok is tartalmazhatják az dynamicparam utasítást és a , processés end az beginutasításokat. További információ: about_Functions és about_Functions_Advanced.
Fontos
A kapcsos zárójelek között nem minden blokk szkriptblokk. Egy ciklus vagy utasítás if parancsai for például egy utasításblokkba vannak zárva.
Az utasításblokkok nem hoznak létre új hatókört a változókhoz, támogatják a többi utasítás kulcsszavak paramétereit.
Szkriptblokkok használata
A szkriptblokk egy Microsoft .NET-keretrendszertípus System.Management.Automation.ScriptBlockegy példánya. A parancsok szkriptblokk paraméterértékekkel rendelkezhetnek. A parancsmag például rendelkezik egy ScriptBlock paraméterrel, Invoke-Command amely szkriptblokkértéket vesz 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éterblokkokkal rendelkező 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 ArgumentListviselkedé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ókat használhat. Az alábbi példa egy szkriptblokkot tárol egy változóban, és átadja a következőnek 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-Commandegy gyermekhatókörben hajtja végre a szkriptblokkot. A híváskezelővel egyszerűbben használhat paramétereket a szkriptblokkokkal.
$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First
A szkriptblokkokból származó kimenetet 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_Operatorscímű témakörben talál.
Delay-bind scriptblocks 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 delay-bind 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 parancsmagok esetén a késleltetési kötés szkriptblokkjai lehetővé teszik, hogy az objektumban egy pipa újra felhasználja a többi paraméter feltöltését.
Megjegyzések a delay-bind szkriptblokkokról paraméterekként:
Explicit módon meg kell adnia a delay-bind szkriptblokkokkal használt paraméterneveket.
A paraméter nem írható be, és a paraméter típusa nem lehet
[scriptblock]vagy[Object].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 scriptblock and there is no input. A scriptblock 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