about_Functions
Deskripsi singkat
Menjelaskan cara membuat dan menggunakan fungsi di PowerShell.
Deskripsi panjang
Fungsi adalah daftar pernyataan PowerShell yang memiliki nama yang Anda tetapkan. Saat menjalankan fungsi, Anda mengetikkan nama fungsi. Pernyataan dalam daftar berjalan seolah-olah Anda telah mengetikkannya di prompt perintah.
Fungsi bisa sesinggah:
function Get-PowerShellProcess { Get-Process PowerShell }
Setelah fungsi ditentukan, Anda dapat menggunakannya seperti cmdlet bawaan. Misalnya, untuk memanggil fungsi yang baru ditentukan Get-PowerShellProcess
:
Get-PowerShellProcess
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
110 78.72 172.39 10.62 10936 1 powershell
Fungsi juga bisa serumit cmdlet atau aplikasi.
Seperti cmdlet, fungsi dapat memiliki parameter. Parameter dapat diberi nama, parameter posisi, sakelar, atau dinamis. Parameter fungsi dapat dibaca dari baris perintah atau dari alur.
Fungsi dapat mengembalikan nilai yang dapat ditampilkan, ditetapkan ke variabel, atau diteruskan ke fungsi atau cmdlet lain. Anda juga dapat menentukan nilai pengembalian menggunakan return
kata kunci. Kata return
kunci tidak memengaruhi atau menekan output lain yang dikembalikan dari fungsi Anda. Namun, return
kata kunci keluar dari fungsi pada baris tersebut. Untuk informasi selengkapnya, lihat about_Return.
Daftar pernyataan fungsi dapat berisi berbagai jenis daftar pernyataan dengan kata kunci begin
, , process
dan end
. Pernyataan ini mencantumkan menangani input dari alur secara berbeda.
Kata kunci filter digunakan untuk membuat jenis fungsi yang berjalan pada setiap objek dalam alur. Filter menyerupan fungsi dengan semua pernyataannya dalam process
blok.
Fungsi juga dapat bertindak seperti cmdlet. Anda dapat membuat fungsi yang berfungsi seperti cmdlet tanpa menggunakan C#
pemrograman. Untuk informasi selengkapnya, lihat about_Functions_Advanced.
Penting
Dalam file skrip dan modul berbasis skrip, fungsi harus ditentukan sebelum dapat dipanggil.
Sintaks
Berikut ini adalah sintaks untuk fungsi:
function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]
{
begin {<statement list>}
process {<statement list>}
end {<statement list>}
}
function [<scope:>]<name>
{
param([type]$parameter1 [,[type]$parameter2])
dynamicparam {<statement list>}
begin {<statement list>}
process {<statement list>}
end {<statement list>}
}
Fungsi mencakup item berikut:
- Kata
function
kunci - Cakupan (opsional)
- Nama yang Anda pilih
- Sejumlah parameter bernama (opsional)
- Satu atau beberapa perintah PowerShell diapit kurung kurawal
{}
Untuk informasi selengkapnya tentang dynamicparam
kata kunci dan parameter dinamis dalam fungsi, lihat about_Functions_Advanced_Parameters.
Metode pemrosesan input
Metode yang dijelaskan di bagian ini disebut sebagai metode pemrosesan input. Untuk fungsi, ketiga metode ini diwakili oleh begin
process
, , dan end
blok fungsi.
Anda tidak diharuskan menggunakan salah satu blok ini dalam fungsi Anda. Jika Anda tidak menggunakan blok bernama, maka PowerShell menempatkan kode di end
blok fungsi. Namun, jika Anda menggunakan salah satu blok bernama ini, atau menentukan dynamicparam
blok, Anda harus menempatkan semua kode dalam blok bernama.
Contoh berikut menunjukkan kerangka fungsi yang berisi begin
blok untuk praproses satu kali, process
blok untuk beberapa pemrosesan rekaman, dan end
blok untuk pasca-pemrosesan satu kali.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$True)]
Param ($Parameter1)
begin{}
process{}
end{}
}
begin
Blok ini digunakan untuk menyediakan pra-pemrosesan satu kali opsional untuk fungsi tersebut. Runtime PowerShell menggunakan kode dalam blok ini sekali untuk setiap instans fungsi dalam alur.
process
Blok ini digunakan untuk menyediakan pemrosesan rekaman demi rekaman untuk fungsi tersebut. Anda dapat menggunakan process
blok tanpa menentukan blok lain. Jumlah process
eksekusi blok tergantung pada cara Anda menggunakan fungsi dan input apa yang diterima fungsi.
Variabel $_
otomatis atau $PSItem
berisi objek saat ini dalam alur untuk digunakan dalam process
blok. Variabel $input
otomatis berisi enumerator yang hanya tersedia untuk fungsi dan blok skrip.
Untuk informasi selengkapnya, lihat about_Automatic_Variables.
- Memanggil fungsi di awal, atau di luar alur, menjalankan
process
blok sekali. - Dalam alur,
process
blok dijalankan sekali untuk setiap objek input yang mencapai fungsi. - Jika input alur yang mencapai fungsi kosong,
process
blok tidak dijalankan.- Blok
begin
danend
masih dijalankan.
- Blok
Penting
Jika parameter fungsi diatur untuk menerima input alur, dan process
blok tidak ditentukan, pemrosesan rekaman demi rekaman akan gagal. Dalam hal ini, fungsi Anda hanya akan dijalankan sekali, terlepas dari input.
end
Blok ini digunakan untuk menyediakan pasca-pemrosesan satu kali opsional untuk fungsi tersebut.
Fungsi sederhana
Fungsi tidak harus rumit untuk berguna. Fungsi paling sederhana memiliki format berikut:
function <function-name> {statements}
Misalnya, fungsi berikut memulai PowerShell dengan opsi Jalankan sebagai Administrator .
function Start-PSAdmin {Start-Process PowerShell -Verb RunAs}
Untuk menggunakan fungsi , ketik: Start-PSAdmin
Untuk menambahkan pernyataan ke fungsi, ketik setiap pernyataan pada baris terpisah, atau gunakan titik koma ;
untuk memisahkan pernyataan.
Misalnya, fungsi berikut menemukan semua .jpg
file di direktori pengguna saat ini yang diubah setelah tanggal mulai.
function Get-NewPix
{
$start = Get-Date -Month 1 -Day 1 -Year 2010
$allpix = Get-ChildItem -Path $env:UserProfile\*.jpg -Recurse
$allpix | Where-Object {$_.LastWriteTime -gt $Start}
}
Anda dapat membuat kotak alat dari fungsi kecil yang berguna. Tambahkan fungsi-fungsi ini ke profil PowerShell Anda, seperti yang dijelaskan dalam about_Profiles dan yang lebih baru dalam topik ini.
Nama Fungsi
Anda dapat menetapkan nama apa pun ke fungsi, tetapi fungsi yang Anda bagikan dengan orang lain harus mengikuti aturan penamaan yang telah dibuat untuk semua perintah PowerShell.
Nama fungsi harus terdiri dari pasangan kata kerja-kata benda di mana kata kerja mengidentifikasi tindakan yang dilakukan fungsi dan kata benda mengidentifikasi item tempat cmdlet melakukan tindakannya.
Fungsi harus menggunakan kata kerja standar yang telah disetujui untuk semua perintah PowerShell. Kata kerja ini membantu kami menjaga nama perintah kami tetap konsisten dan mudah dipahami pengguna.
Untuk informasi selengkapnya tentang kata kerja PowerShell standar, lihat Kata Kerja yang Disetujui.
Fungsi dengan Parameter
Anda dapat menggunakan parameter dengan fungsi, termasuk parameter bernama, parameter posisi, parameter sakelar, dan parameter dinamis. Untuk informasi selengkapnya tentang parameter dinamis dalam fungsi, lihat about_Functions_Advanced_Parameters.
Parameter Bernama
Anda dapat menentukan sejumlah parameter bernama. Anda dapat menyertakan nilai default untuk parameter bernama, seperti yang dijelaskan nanti dalam topik ini.
Anda dapat menentukan parameter di dalam kurung kurawal menggunakan param
kata kunci, seperti yang ditunjukkan dalam sintaks sampel berikut:
function <name> {
param ([type]$parameter1 [,[type]$parameter2])
<statement list>
}
Anda juga dapat menentukan parameter di luar kurung kurawal tanpa Param
kata kunci, seperti yang ditunjukkan dalam sintaks sampel berikut:
function <name> [([type]$parameter1[,[type]$parameter2])] {
<statement list>
}
Di bawah ini adalah contoh sintaks alternatif ini.
function Add-Numbers([int]$one, [int]$two) {
$one + $two
}
Meskipun metode pertama lebih disukai, tidak ada perbedaan antara kedua metode ini.
Saat Anda menjalankan fungsi, nilai yang Anda berikan untuk parameter ditetapkan ke variabel yang berisi nama parameter. Nilai variabel tersebut dapat digunakan dalam fungsi .
Contoh berikut adalah fungsi yang disebut Get-SmallFiles
. Fungsi ini memiliki $Size
parameter . Fungsi ini menampilkan semua file yang lebih kecil dari $Size
nilai parameter, dan mengecualikan direktori:
function Get-SmallFiles {
Param($Size)
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
Dalam fungsi , Anda dapat menggunakan $Size
variabel , yang merupakan nama yang ditentukan untuk parameter .
Untuk menggunakan fungsi ini, ketik perintah berikut:
Get-SmallFiles -Size 50
Anda juga dapat memasukkan nilai untuk parameter bernama tanpa nama parameter. Misalnya, perintah berikut memberikan hasil yang sama dengan perintah yang memberi nama parameter Ukuran :
Get-SmallFiles 50
Untuk menentukan nilai default untuk parameter, ketik tanda sama dengan dan nilai setelah nama parameter, seperti yang ditunjukkan dalam variasi Get-SmallFiles
contoh berikut:
function Get-SmallFiles ($Size = 100) {
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
Jika Anda mengetik Get-SmallFiles
tanpa nilai, fungsi menetapkan 100 ke $size
. Jika Anda memberikan nilai, fungsi menggunakan nilai tersebut.
Secara opsional, Anda dapat memberikan string bantuan singkat yang menjelaskan nilai default parameter Anda, dengan menambahkan atribut PSDefaultValue ke deskripsi parameter Anda, dan menentukan properti Bantuan PSDefaultValue. Untuk memberikan string bantuan yang menjelaskan nilai default (100) parameter Ukuran dalam Get-SmallFiles
fungsi, tambahkan atribut PSDefaultValue seperti yang ditunjukkan dalam contoh berikut.
function Get-SmallFiles {
param (
[PSDefaultValue(Help = '100')]
$Size = 100
)
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
Untuk informasi selengkapnya tentang kelas atribut PSDefaultValue , lihat Anggota Atribut PSDefaultValue.
Parameter Posisi
Parameter posisi adalah parameter tanpa nama parameter. PowerShell menggunakan urutan nilai parameter untuk mengaitkan setiap nilai parameter dengan parameter dalam fungsi.
Saat Anda menggunakan parameter posisi, ketik satu atau beberapa nilai setelah nama fungsi. Nilai parameter posisi ditetapkan ke $args
variabel array.
Nilai yang mengikuti nama fungsi ditetapkan ke posisi pertama dalam $args
array, $args[0]
.
Fungsi berikut Get-Extension
menambahkan .txt
ekstensi nama file ke nama file yang Anda berikan:
function Get-Extension {
$name = $args[0] + ".txt"
$name
}
Get-Extension myTextFile
myTextFile.txt
Beralih Parameter
Sakelar adalah parameter yang tidak memerlukan nilai. Sebagai gantinya, Anda mengetikkan nama fungsi diikuti dengan nama parameter pengalihan.
Untuk menentukan parameter pengalihan, tentukan jenis [switch]
sebelum nama parameter, seperti yang ditunjukkan dalam contoh berikut:
function Switch-Item {
param ([switch]$on)
if ($on) { "Switch on" }
else { "Switch off" }
}
Saat Anda mengetik On
parameter sakelar setelah nama fungsi, fungsi akan menampilkan Switch on
. Tanpa parameter pengalihan, parameter akan menampilkan Switch off
.
Switch-Item -on
Switch on
Switch-Item
Switch off
Anda juga dapat menetapkan nilai Boolean ke sakelar saat menjalankan fungsi, seperti yang diperlihatkan dalam contoh berikut:
Switch-Item -on:$true
Switch on
Switch-Item -on:$false
Switch off
Menggunakan Splatting untuk Mewakili Parameter Perintah
Anda dapat menggunakan splatting untuk mewakili parameter perintah. Fitur ini diperkenalkan di Windows PowerShell 3.0.
Gunakan teknik ini dalam fungsi yang memanggil perintah dalam sesi. Anda tidak perlu mendeklarasikan atau menghitung parameter perintah, atau mengubah fungsi saat parameter perintah berubah.
Contoh fungsi berikut memanggil Get-Command
cmdlet. Perintah menggunakan @Args
untuk mewakili parameter Get-Command
.
function Get-MyCommand { Get-Command @Args }
Anda dapat menggunakan semua parameter Get-Command
saat memanggil Get-MyCommand
fungsi. Parameter dan nilai parameter diteruskan ke perintah menggunakan @Args
.
Get-MyCommand -Name Get-ChildItem
CommandType Name ModuleName
----------- ---- ----------
Cmdlet Get-ChildItem Microsoft.PowerShell.Management
Fitur ini @Args
menggunakan $Args
parameter otomatis, yang mewakili parameter dan nilai cmdlet yang tidak dinyatakan dari argumen yang tersisa.
Untuk informasi selengkapnya, lihat about_Splatting.
Piping Objects to Functions
Fungsi apa pun dapat mengambil input dari alur. Anda dapat mengontrol bagaimana fungsi memproses input dari alur menggunakan begin
kata kunci , , process
dan end
. Contoh sintaks berikut menunjukkan kata kunci ini:
Daftar process
pernyataan berjalan satu kali untuk setiap objek dalam alur.
process
Saat blok berjalan, setiap objek alur ditetapkan ke $_
variabel otomatis, satu objek alur pada satu waktu.
Fungsi berikut menggunakan process
kata kunci. Fungsi menampilkan nilai dari alur:
function Get-Pipeline
{
process {"The value is: $_"}
}
1,2,4 | Get-Pipeline
The value is: 1
The value is: 2
The value is: 4
Jika Anda menginginkan fungsi yang dapat mengambil input atau input alur dari parameter, maka process
blok perlu menangani kedua kasus. Contohnya:
function Get-SumOfNumbers {
param (
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
if ($null -ne $Numbers) {
foreach ($n in $Numbers) {
$retValue += $n
}
} else {
$retValue += $_
}
}
end { $retValue }
}
PS> 1,2,3,4 | Get-SumOfNumbers
10
PS> Get-SumOfNumbers 1,2,3,4
10
Saat Anda menggunakan fungsi dalam alur, objek yang disalurkan ke fungsi ditetapkan ke $input
variabel otomatis. Fungsi menjalankan pernyataan dengan begin
kata kunci sebelum objek apa pun berasal dari alur. Fungsi menjalankan pernyataan dengan end
kata kunci setelah semua objek diterima dari alur.
Contoh berikut menunjukkan $input
variabel otomatis dengan begin
kata kunci dan end
.
function Get-PipelineBeginEnd {
begin { "Begin: The input is $input" }
end { "End: The input is $input" }
}
Jika fungsi ini dijalankan menggunakan alur, fungsi ini akan menampilkan hasil berikut:
1,2,4 | Get-PipelineBeginEnd
Begin: The input is
End: The input is 1 2 4
begin
Saat pernyataan berjalan, fungsi tidak memiliki input dari alur. Pernyataan end
berjalan setelah fungsi memiliki nilai .
Jika fungsi memiliki process
kata kunci, setiap objek di $input
dihapus dari $input
dan ditetapkan ke $_
. Contoh berikut memiliki process
daftar pernyataan:
function Get-PipelineInput
{
process {"Processing: $_ " }
end {"End: The input is: $input" }
}
Dalam contoh ini, setiap objek yang disalurkan ke fungsi dikirim ke process
daftar pernyataan. Pernyataan process
berjalan pada setiap objek, satu objek pada satu waktu. Variabel $input
otomatis kosong ketika fungsi mencapai end
kata kunci.
1,2,4 | Get-PipelineInput
Processing: 1
Processing: 2
Processing: 4
End: The input is:
Untuk informasi selengkapnya, lihat Menggunakan Enumerator
Filter
Filter adalah jenis fungsi yang berjalan pada setiap objek dalam alur. Filter menyerupan fungsi dengan semua pernyataannya dalam process
blok.
Sintaks filter adalah sebagai berikut:
filter [<scope:>]<name> {<statement list>}
Filter berikut mengambil entri log dari alur lalu menampilkan seluruh entri atau hanya bagian pesan dari entri:
filter Get-ErrorLog ([switch]$Message)
{
if ($Message) { Out-Host -InputObject $_.Message }
else { $_ }
}
Ini dapat digunakan sebagai berikut:
Get-WinEvent -LogName System -MaxEvents 100 | Get-ErrorLog -Message
Cakupan Fungsi
Fungsi ada dalam cakupan tempat fungsi dibuat.
Jika fungsi adalah bagian dari skrip, fungsi tersedia untuk pernyataan dalam skrip tersebut. Secara default, fungsi dalam skrip tidak tersedia di luar skrip tersebut.
Anda dapat menentukan cakupan fungsi. Misalnya, fungsi ditambahkan ke cakupan global dalam contoh berikut:
function global:Get-DependentSvs {
Get-Service | Where-Object {$_.DependentServices}
}
Saat fungsi berada dalam cakupan global, Anda dapat menggunakan fungsi dalam skrip, dalam fungsi, dan di baris perintah.
Functions membuat cakupan baru. Item yang dibuat dalam fungsi, seperti variabel, hanya ada dalam cakupan fungsi.
Untuk informasi selengkapnya, lihat about_Scopes.
Menemukan dan Mengelola Fungsi Menggunakan Fungsi: Drive
Semua fungsi dan filter di PowerShell secara otomatis disimpan di Function:
drive. Drive ini diekspos oleh penyedia Fungsi PowerShell.
Saat merujuk ke Function:
drive, ketik titik dua setelah Fungsi, seperti yang akan Anda lakukan saat merujuk C
atau D
drive komputer.
Perintah berikut menampilkan semua fungsi dalam sesi PowerShell saat ini:
Get-ChildItem function:
Perintah dalam fungsi disimpan sebagai blok skrip dalam properti definisi fungsi. Misalnya, untuk menampilkan perintah dalam fungsi Bantuan yang disertakan dengan PowerShell, ketik:
(Get-ChildItem function:help).Definition
Anda juga dapat menggunakan sintaks berikut.
$function:help
Untuk informasi selengkapnya tentang Function:
drive, lihat topik bantuan untuk penyedia Fungsi . Ketik Get-Help Function
.
Gunakan Kembali Fungsi dalam Sesi Baru
Saat Anda mengetik fungsi di prompt perintah PowerShell, fungsi menjadi bagian dari sesi saat ini. Fungsi ini tersedia hingga sesi berakhir.
Untuk menggunakan fungsi Anda di semua sesi PowerShell, tambahkan fungsi ke profil PowerShell Anda. Untuk informasi selengkapnya tentang profil, lihat about_Profiles.
Anda juga dapat menyimpan fungsi Anda dalam file skrip PowerShell. Ketik fungsi Anda dalam file teks, lalu simpan file dengan .ps1
ekstensi nama file.
Menulis Bantuan untuk Fungsi
Get-Help
Cmdlet mendapatkan bantuan untuk fungsi, serta untuk cmdlet, penyedia, dan skrip. Untuk mendapatkan bantuan untuk fungsi, ketik Get-Help
diikuti dengan nama fungsi.
Misalnya, untuk mendapatkan bantuan untuk fungsi, Get-MyDisks
ketik:
Get-Help Get-MyDisks
Anda dapat menulis bantuan untuk fungsi menggunakan salah satu dari dua metode berikut:
Bantuan Berbasis Komentar untuk Fungsi
Buat topik bantuan menggunakan kata kunci khusus di komentar. Untuk membuat bantuan berbasis komentar untuk fungsi, komentar harus ditempatkan di awal atau akhir isi fungsi atau pada baris sebelum kata kunci fungsi. Untuk informasi selengkapnya tentang bantuan berbasis komentar, lihat about_Comment_Based_Help.
Bantuan Berbasis XML untuk Fungsi
Buat topik bantuan berbasis XML, seperti jenis yang biasanya dibuat untuk cmdlet. Bantuan berbasis XML diperlukan jika Anda melokalisasi topik bantuan ke dalam beberapa bahasa.
Untuk mengaitkan fungsi dengan topik bantuan berbasis XML, gunakan
.EXTERNALHELP
kata kunci bantuan berbasis komentar. Tanpa kata kunci ini,Get-Help
tidak dapat menemukan topik bantuan fungsi dan panggilan keGet-Help
untuk fungsi hanya mengembalikan bantuan yang dihasilkan secara otomatis.Untuk informasi selengkapnya tentang
.EXTERNALHELP
kata kunci, lihat about_Comment_Based_Help. Untuk informasi selengkapnya tentang bantuan berbasis XML, lihat Cara Menulis Bantuan Cmdlet.
Lihat juga
- about_Automatic_Variables
- about_Comment_Based_Help
- about_Function_Provider
- about_Functions_Advanced
- about_Functions_Advanced_Methods
- about_Functions_Advanced_Parameters
- about_Functions_CmdletBindingAttribute
- about_Functions_OutputTypeAttribute
- about_Parameters
- about_Profiles
- about_Scopes
- about_Script_Blocks