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 dengan nilai "Method". 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 dengan koma.

Misalnya, perintah berikut memanggil metode Hentikan 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 , menggantikan teks dalam string. Dalam contoh di bawah ini, titik (.) dapat ditempatkan segera setelah kuotasi 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).

Mulai dari 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 koleksi daftar, PowerShell secara otomatis menghitung item dalam koleksi dan memanggil metode pada setiap item. Untuk informasi selengkapnya, lihat Access_Enumeration about_Member.

Contoh

Contoh berikut menjalankan metode Kill dari 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 mentransmisikannya 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 beban yang kurang spesifik object dari metode Bar dipilih.

[Foo]::new().Bar(1)
object: 1

Dalam contoh ini kita mentransmisikan 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 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.

Lihat juga