Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
Betik engellemesinin ne olduğunu tanımlar ve Betik engellemelerinin PowerShell programlama dilinde 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. Betik blokları değişkenler için yeni bir kapsam oluşturur.
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.
return anahtar sözcüğünü 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ış parametreleri atamak için param anahtar sözcüğünü kullanın:
{
param ([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
İşlevler gibi betik blokları da deyimini dynamicparam ve begin, processve end deyimlerini içerebilir. Daha fazla bilgi için bkz. about_Functions ve about_Functions_Advanced.
Önemli
Küme ayraçları içine alınmış tüm bloklar betik blokları değildir. Örneğin, bir for döngüdeki veya deyimdeki if komutlar bir deyim bloğu içine alınır.
Deyim blokları değişkenler için yeni bir kapsam oluşturmaz, diğer deyim anahtar sözcüklerinin parametrelerini destekler.
Betik bloklarını kullanma
Betik bloğu, Bir Microsoft .NET Framework türünün System.Management.Automation.ScriptBlockörneğidir. Komutlar scriptblock parametre değerlerine sahip olabilir. Örneğin, Invoke-Command cmdlet'in bu örnekte gösterildiği gibi scriptblock 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 scriptblock, ve $p2parametrelerini $p1 oluşturmak için anahtar sözcüğünü param kullanır. "First" dizesi ilk parametreye ($p1) ve "Second" dizesine ($p2) bağlıdır.
ArgumentListdavranışı 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 örnekte bir değişkende betik bloğu depolanıp öğesine geçirildi Invoke-Command.
$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 scriptblock'u bir 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
Çağrı 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'ini yürütmeden önce parametreleri tanımlamak için gecikme 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.
parametresinin yazılmamış olması ve parametrenin türü
[scriptblock]veya[Object]olamaz.İşlem hattı girişi sağlamadan delay-bind betik 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 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
Ayrıca bakınız
PowerShell