Aracılığıyla paylaş


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. ProcessBegin 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 $p2parametrelerini $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-Commandgeç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.