about_Script_Blocks
Kısa açıklama
Betik bloğunun ne olduğunu tanımlar ve PowerShell programlama dilinde betik bloklarının nasıl kullanılacağını açıklar.
Uzun açıklama
PowerShell programlama dilinde betik bloğu, tek bir birim olarak kullanılabilecek deyim veya ifade koleksiyonudur. Deyim koleksiyonu, işlev olarak tanımlanan küme ayraçları (){}
içine alınabilir veya bir betik dosyasına kaydedilebilir. Betik bloğu değerler döndürebilir, parametreleri ve bağımsız değişkenleri kabul edebilir.
Söz diziminde gösterildiği gibi, betik bloğu küme ayraçlarındaki bir deyim listesidir:
{<statement list>}
Betik bloğu, betik bloğundaki tüm komutların çıkışını tek bir nesne veya dizi olarak döndürür.
Anahtar sözcüğünü return
kullanarak bir dönüş değeri de belirtebilirsiniz. Anahtar return
sözcük, betik bloğunuzdan döndürülen diğer çıktıları etkilemez veya engellemez. Ancak anahtar sözcüğü, return
bu satırdaki betik bloğundan çıkar. Daha fazla bilgi için bkz . about_Return.
İşlevler gibi betik bloğu da parametreleri içerebilir. Aşağıdaki söz diziminde gösterildiği gibi adlandırılmış parametreler atamak için Param anahtar sözcüğünü kullanın:
{
Param([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
Not
Betik bloğunda, işlevin aksine, ayraçların dışında parametre belirtemezsiniz.
İşlevler gibi, betik blokları da , , ve end
anahtar sözcüklerini içerebilirdynamicparam
. process
begin
Daha fazla bilgi için bkz . about_Functions ve about_Functions_Advanced.
Betik Bloklarını Kullanma
Betik bloğu, Bir Microsoft .NET Framework türünün System.Management.Automation.ScriptBlock
örneğidir. Komutlar betik bloğu parametre değerlerine sahip olabilir. Örneğin, Invoke-Command
cmdlet'in bu örnekte gösterildiği gibi bir betik bloğu değeri alan bir parametresi vardır ScriptBlock
:
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
ayrıca parametre blokları olan betik bloklarını yürütebilir.
Parametreler ArgumentList parametresi kullanılarak konuma göre atanır.
Invoke-Command -ScriptBlock { param($p1, $p2)
"p1: $p1"
"p2: $p2"
} -ArgumentList "First", "Second"
p1: First
p2: Second
Yukarıdaki örnekteki betik bloğu, ve $p2
parametrelerini $p1
oluşturmak için anahtar sözcüğünü param
kullanır. "First" dizesi ilk parametreye ($p1
) ve "second" ($p2
) öğesine bağlıdır.
ArgumentList'in davranışı hakkında daha fazla bilgi için bkz. about_Splatting.
Betik bloklarını depolamak ve yürütmek için değişkenleri kullanabilirsiniz. Aşağıdaki örnek, bir betik bloğunu bir değişkende depolar ve bunu öğesine Invoke-Command
geçirir.
$a = { Get-Service BITS }
Invoke-Command -ScriptBlock $a
Status Name DisplayName
------ ---- -----------
Running BITS Background Intelligent Transfer Ser...
Çağrı işleci, bir değişkende depolanan betik bloklarını yürütmenin başka bir yoludur.
gibi Invoke-Command
, çağrı işleci betik bloğunu alt kapsamda yürütür. Çağrı işleci, betik bloklarınızla parametreleri kullanmanızı kolaylaştırabilir.
$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First
Atamayı kullanarak betik bloklarınızdaki çıkışı bir değişkende depolayabilirsiniz.
PS> $a = { 1 + 1}
PS> $b = &$a
PS> $b
2
PS> $a = { 1 + 1}
PS> $b = Invoke-Command $a
PS> $b
2
Arama işleci hakkında daha fazla bilgi için bkz . about_Operators.
Parametrelerle delay-bind betik bloklarını kullanma
İşlem hattı girişini kabul eden türemiş bir parametre, parametresinde delay-bind betik bloklarının kullanılmasını sağlar. İşlem hattı cmdlet'i yürütmeden önce parametreleri tanımlamak için gecikmeli bağlama betik bloklarını kısaltma olarak kullanabilirsiniz.
Delay-bind betik bloğunda, işlem hattı değişkenini $_
kullanarak nesnesine başvurabilirsiniz.
# 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)" }
Daha karmaşık cmdlet'lerde delay-bind betik blokları, nesnedeki bir kanallının diğer parametreleri doldurmak için yeniden kullanılmasına olanak sağlar.
Parametre olarak gecikme bağlama betiği bloklarıyla ilgili notlar:
Delay-bind betik bloklarıyla kullandığınız parametre adlarını açıkça belirtmeniz gerekir.
Parametrenin türü kaldırılmamalıdır ve parametrenin türü veya
[object]
olamaz[scriptblock]
.İşlem hattı girişi sağlamadan bir gecikme bağlama betiği bloğu kullanırsanız bir hata alırsınız.
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
Ayrıca bkz.
PowerShell