Bagikan melalui


tentang_Blok_Skrip

Deskripsi singkat

Menentukan apa itu blok skrip dan menjelaskan cara menggunakan blokir 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. Blok skrip membuat cakupan baru untuk variabel.

Secara sintaksis, blok skrip adalah daftar pernyataan dalam kurung kurawal, seperti yang ditunjukkan dalam sintaks berikut:

{<statement list>}

Blok skrip mengembalikan output semua perintah dalam blok skrip, baik sebagai objek tunggal atau sebagai array.

Anda juga dapat menentukan nilai pengembalian menggunakan kata kunci return. Kata return kunci tidak memengaruhi atau menekan output lain yang dikembalikan dari blokir 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>
}

Seperti fungsi, blok skrip dapat menyertakan dynamicparam pernyataan, dan beginpernyataan , process, dan end . Untuk informasi selengkapnya, lihat about_Functions dan about_Functions_Advanced.

Penting

Tidak semua blok yang diapit kurung kurawal adalah blok skrip. Misalnya, perintah dalam perulangan for atau if pernyataan diapit dalam blok pernyataan. Blok pernyataan tidak membuat cakupan baru untuk variabel, mendukung parameter kata kunci pernyataan lainnya.

Menggunakan blokir skrip

Blokir skrip adalah instans jenis System.Management.Automation.ScriptBlockMicrosoft .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 blokir 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

Blokir 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 lebih lanjut tentang perilaku ArgumentList, lihat about_Splatting.

Anda dapat menggunakan variabel untuk menyimpan dan menjalankan blokir skrip. Contoh di bawah ini menyimpan blokir 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 blokir skrip yang disimpan dalam variabel. Seperti Invoke-Command, operator panggilan menjalankan blokir skrip dalam cakupan anak. Operator panggilan dapat mempermudah Anda menggunakan parameter dengan blokir skrip Anda.

$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First

Anda dapat menyimpan output dari blokir 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 blokir skrip yang diikat penundaan sebagai parameter:

  • Anda harus secara eksplisit menentukan nama parameter apa pun yang Anda gunakan dengan blok skrip yang tertunda-ikat.

  • Parameter tidak boleh tanpa tipe, dan tipe parameter tidak boleh [scriptblock] atau [Object].

  • Anda menerima kesalahan jika Anda menggunakan blokir skrip yang tertunda tanpa memberikan input alur.

    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
    

Lihat juga