about_Methods
Deskripsi singkat
Menjelaskan cara menggunakan metode untuk melakukan tindakan pada objek di PowerShell.
Deskripsi panjang
PowerShell menggunakan objek untuk mewakili item di penyimpanan data atau status komputer. Misalnya, objek FileInfo mewakili file dalam drive sistem file dan objek ProcessInfo mewakili proses di komputer.
Objek memiliki properti, yang menyimpan data tentang objek, dan metode yang memungkinkan Anda mengubah objek.
"Metode" adalah serangkaian instruksi yang menentukan tindakan yang dapat Anda lakukan pada objek. Misalnya, FileInfo
objek menyertakan CopyTo
metode yang menyalin file yang diwakili FileInfo
objek.
Untuk mendapatkan metode objek apa pun, gunakan Get-Member
cmdlet . Gunakan properti MemberType-nya dengan nilai "Metode". Perintah berikut mendapatkan metode objek proses.
Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
BeginErrorReadLine Method System.Void BeginErrorReadLine()
BeginOutputReadLine Method System.Void BeginOutputReadLine()
...
Kill Method System.Void Kill()
Refresh Method System.Void Refresh()
Start Method bool Start()
ToString Method string ToString()
WaitForExit Method bool WaitForExit(int milliseconds), ...
WaitForInputIdle Method bool WaitForInputIdle(int millisecon...
Untuk melakukan atau "memanggil" metode objek, ketik titik (.), nama metode, dan sekumpulan tanda kurung "()". Jika metode memiliki argumen, tempatkan nilai argumen di dalam tanda kurung. Tanda kurung diperlukan untuk setiap panggilan metode, bahkan ketika tidak ada argumen. Jika metode mengambil beberapa argumen, mereka harus dipisahkan oleh koma.
Misalnya, perintah berikut memanggil metode Kill proses untuk mengakhiri proses Notepad di komputer.
$notepad = Get-Process notepad
$notepad.Kill()
Contoh ini dapat dipersingkat dengan menggabungkan pernyataan di atas.
(Get-Process Notepad).Kill()
Perintah Get-Process
diapit dalam tanda kurung untuk memastikan bahwa perintah berjalan sebelum metode Kill dipanggil. Metode Kill
ini kemudian dipanggil pada objek yang dikembalikan Process
.
Metode lain yang Replace
sangat berguna adalah metode string. Metode ini Replace
, mengganti teks dalam string. Dalam contoh di bawah ini, titik (.) dapat ditempatkan segera setelah kutipan akhir string.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Seperti yang ditunjukkan pada contoh sebelumnya, Anda dapat memanggil metode pada objek yang Anda dapatkan dengan menggunakan perintah, objek dalam variabel, atau apa pun yang menghasilkan objek (seperti string dalam tanda kutip).
Dimulai di PowerShell 4.0, pemanggilan metode dengan menggunakan nama metode dinamis didukung.
Mempelajari tentang metode
Untuk menemukan definisi metode objek, buka topik bantuan untuk jenis objek dan cari halaman metodenya. Misalnya, halaman berikut menjelaskan metode objek proses System.Diagnostics.Process.
Untuk menentukan argumen metode, tinjau definisi metode, yang seperti diagram sintaks cmdlet PowerShell.
Definisi metode mungkin memiliki satu atau beberapa tanda tangan metode, yang seperti set parameter cmdlet PowerShell. Tanda tangan menunjukkan semua format perintah yang valid untuk memanggil metode .
Misalnya, CopyTo
metode FileInfo
kelas berisi dua tanda tangan metode berikut:
CopyTo(String destFileName)
CopyTo(String destFileName, Boolean overwrite)
Tanda tangan metode pertama mengambil nama file tujuan (dan jalur). Contoh berikut menggunakan metode pertama CopyTo
untuk menyalin Final.txt
file ke C:\Bin
direktori.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Catatan
Tidak seperti mode argumen PowerShell, metode objek dijalankan dalam mode ekspresi, yang merupakan pass-through ke kerangka kerja .NET tempat PowerShell dibangun. Dalam mode ekspresi argumen bareword (string yang tidak dikutip) tidak diperbolehkan. Anda dapat melihat perbedaan ini saat menggunakan jalur sebagai parameter, versus jalur sebagai argumen. Anda dapat membaca selengkapnya tentang mode penguraian di about_Parsing
Tanda tangan metode kedua mengambil nama file tujuan dan nilai Boolean yang menentukan apakah file tujuan harus ditimpa, jika sudah ada.
Contoh berikut menggunakan metode kedua CopyTo
untuk menyalin Final.txt
file ke C:\Bin
direktori, dan untuk menimpa file yang ada.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Enumerasi akses anggota
Dimulai di PowerShell 3.0, saat Anda menggunakan operator akses anggota (.
) untuk mengakses metode yang tidak ada di kumpulan daftar, PowerShell secara otomatis menghitung item dalam koleksi dan memanggil metode pada setiap item. Untuk informasi selengkapnya, lihat about_Member-Access_Enumeration.
Contoh
Contoh berikut menjalankan metode Kill objek proses individual dalam kumpulan objek.
Perintah pertama memulai tiga instans proses Notepad. Get-Process
mendapatkan ketiga instans proses Notepad dan menyimpannya dalam $p
variabel.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
$p.Count
3
Perintah berikutnya menjalankan metode Kill pada ketiga proses dalam $p
variabel. Perintah ini berfungsi meskipun kumpulan proses tidak memiliki Kill
metode .
$p.Kill()
Get-Process Notepad
Perintah Get-Process
mengonfirmasi bahwa Kill
metode berfungsi.
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<< notepad
+ CategoryInfo : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand
Contoh ini secara fungsional setara dengan menggunakan Foreach-Object
cmdlet untuk menjalankan metode pada setiap objek dalam koleksi.
$p | ForEach-Object {$_.Kill()}
Metode ForEach dan Where
Dimulai di PowerShell 4.0, pemfilteran koleksi menggunakan sintaks metode didukung. Ini memungkinkan penggunaan dua metode baru saat berhadapan dengan koleksi ForEach
dan Where
.
Anda dapat membaca selengkapnya tentang metode ini di about_arrays
Memanggil metode tertentu ketika ada beberapa kelebihan beban
Pertimbangkan skenario berikut saat memanggil metode .NET. Jika metode mengambil objek tetapi memiliki kelebihan beban melalui antarmuka yang mengambil jenis yang lebih spesifik, PowerShell memilih metode yang menerima objek kecuali Anda secara eksplisit melemparkannya ke antarmuka tersebut.
Add-Type -TypeDefinition @'
// Interface
public interface IFoo {
string Bar(int p);
}
// Type that implements the interface
public class Foo : IFoo {
// Direct member method named 'Bar'
public string Bar(object p) { return $"object: {p}"; }
// *Explicit* implementation of IFoo's 'Bar' method().
string IFoo.Bar(int p) {
return $"int: {p}";
}
}
'@
Dalam contoh ini, kelebihan metode Bar yang kurang spesifik object
dipilih.
[Foo]::new().Bar(1)
object: 1
Dalam contoh ini kami mentransmisian metode ke antarmuka IFoo untuk memilih kelebihan beban yang lebih spesifik dari metode Bar .
([IFoo] [Foo]::new()).Bar(1)
int: 1
Menggunakan metode .NET yang mengambil jalur sistem file
PowerShell mendukung beberapa runspace per proses. Setiap runspace memiliki direktorinya sendiri saat ini. Ini tidak sama dengan direktori kerja dari proses saat ini: [System.Environment]::CurrentDirectory
.
Metode .NET menggunakan direktori kerja proses. Cmdlet PowerShell menggunakan lokasi Runspace. Selain itu, metode .NET hanya berfungsi dengan jalur sistem file asli, bukan objek Jalur PowerShell. Untuk menggunakan jalur PowerShell dengan metode .NET, Anda harus menyelesaikan jalur ke jalur filesystem-native sebelum meneruskannya ke metode .NET.