about_Script_Blocks
Deskripsi singkat
Menentukan apa itu blok skrip dan menjelaskan cara menggunakan blok skrip dalam bahasa pemrograman PowerShell.
Deskripsi panjang
Dalam bahasa pemrograman PowerShell, blok skrip adalah kumpulan pernyataan atau ekspresi yang dapat digunakan sebagai satu unit. Kumpulan pernyataan dapat diapit kurung kurawal ({}
), didefinisikan sebagai fungsi, atau disimpan dalam file skrip. Blok skrip dapat mengembalikan nilai dan menerima parameter dan argumen.
Secara sintis, blok skrip adalah daftar pernyataan dalam kurung kurawal, seperti yang ditunjukkan dalam sintaks berikut:
{<statement list>}
Blok skrip mengembalikan output semua perintah di blok skrip, baik sebagai objek tunggal atau sebagai array.
Anda juga dapat menentukan nilai pengembalian menggunakan return
kata kunci. Kata return
kunci tidak memengaruhi atau menekan output lain yang dikembalikan dari blok skrip Anda. Namun, return
kata kunci keluar dari blok skrip pada baris tersebut. Untuk informasi selengkapnya, lihat about_Return.
Seperti fungsi, blok skrip dapat menyertakan parameter. Gunakan kata kunci Param untuk menetapkan parameter bernama, seperti yang ditunjukkan dalam sintaks berikut:
{
Param([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
Catatan
Dalam blok skrip, tidak seperti fungsi, Anda tidak dapat menentukan parameter di luar kurung kurawal.
Seperti fungsi, blok skrip dapat menyertakan DynamicParam
kata kunci , , Begin
Process
, dan End
. Untuk informasi selengkapnya, lihat about_Functions dan about_Functions_Advanced.
Menggunakan Blok Skrip
Blok skrip adalah instans jenis System.Management.Automation.ScriptBlock
Microsoft .NET Framework . Perintah dapat memiliki nilai parameter blok skrip. Misalnya, Invoke-Command
cmdlet memiliki ScriptBlock
parameter yang mengambil nilai blok skrip, seperti yang ditunjukkan dalam contoh ini:
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
juga dapat menjalankan blok skrip yang memiliki blok parameter.
Parameter ditetapkan berdasarkan posisi menggunakan parameter ArgumentList .
Invoke-Command -ScriptBlock { param($p1, $p2)
"p1: $p1"
"p2: $p2"
} -ArgumentList "First", "Second"
p1: First
p2: Second
Blok skrip dalam contoh sebelumnya menggunakan param
kata kunci untuk membuat parameter $p1
dan $p2
. String "Pertama" terikat ke parameter pertama ($p1
) dan "Kedua" terikat ke ($p2
).
Untuk informasi selengkapnya tentang perilaku ArgumentList, lihat about_Splatting.
Anda dapat menggunakan variabel untuk menyimpan dan menjalankan blok skrip. Contoh di bawah ini menyimpan blok skrip dalam variabel dan meneruskannya ke Invoke-Command
.
$a = { Get-Service BITS }
Invoke-Command -ScriptBlock $a
Status Name DisplayName
------ ---- -----------
Running BITS Background Intelligent Transfer Ser...
Operator panggilan adalah cara lain untuk menjalankan blok skrip yang disimpan dalam variabel.
Seperti Invoke-Command
, operator panggilan menjalankan blok skrip dalam cakupan anak. Operator panggilan dapat memudahkan Anda menggunakan parameter dengan blok skrip Anda.
$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First
Anda dapat menyimpan output dari blok skrip Anda dalam variabel menggunakan penugasan.
PS> $a = { 1 + 1}
PS> $b = &$a
PS> $b
2
PS> $a = { 1 + 1}
PS> $b = Invoke-Command $a
PS> $b
2
Untuk informasi selengkapnya tentang operator panggilan, lihat about_Operators.
Menggunakan blok skrip tertunda-ikat dengan parameter
Parameter yang dititik yang menerima input alur memungkinkan penggunaan blok skrip yang tertunda-ikat pada parameter . Anda dapat menggunakan blok skrip tertunda-ikat sebagai singkatan untuk menentukan parameter untuk cmdlet yang disalurkan sebelum mengeksekusinya.
Dalam blok skrip yang mengikat penundaan, Anda dapat mereferensikan pipa dalam objek menggunakan variabel $_
alur .
# 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)" }
Dalam cmdlet yang lebih kompleks, blok skrip yang tertunda memungkinkan penggunaan kembali satu pipa dalam objek untuk mengisi parameter lain.
Catatan tentang blok skrip yang mengikat penundaan sebagai parameter:
Anda harus secara eksplisit menentukan nama parameter apa pun yang Anda gunakan dengan blok skrip yang tertunda-ikat.
Parameter tidak boleh di-untyped, dan jenis parameter tidak boleh
[scriptblock]
atau[object]
.Anda menerima kesalahan jika Anda menggunakan blok skrip yang tertunda-ikat tanpa memberikan input alur.
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
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk