Aracılığıyla paylaş


about_Methods

Kısa açıklama

PowerShell'de nesneler üzerinde eylemler gerçekleştirmek için yöntemlerin nasıl kullanılacağını açıklar.

Uzun açıklama

PowerShell, veri depolarındaki öğeleri veya bilgisayarın durumunu göstermek için nesneleri kullanır. Örneğin, FileInfo nesneleri dosya sistemi sürücülerindeki dosyaları, ProcessInfo nesneleri ise bilgisayardaki işlemleri temsil eder.

Nesneler, nesneyle ilgili verileri depolayan özelliklere ve nesneyi değiştirmenize olanak tanıyan yöntemlere sahiptir.

"Yöntem", nesne üzerinde gerçekleştirebileceğiniz bir eylemi belirten bir yönerge kümesidir. Örneğin, nesnesi, FileInfo nesnenin CopyTo temsil ettiği dosyayı FileInfo kopyalayan yöntemi içerir.

Herhangi bir nesnenin yöntemlerini almak için cmdlet'ini Get-Member kullanın. MemberType özelliğini "Method" değeriyle kullanın. Aşağıdaki komut, işlem nesnelerinin yöntemlerini alır.

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...

Bir nesnenin yöntemini gerçekleştirmek veya "çağırmak" için bir nokta (.), yöntem adı ve "()" parantez kümesi yazın. Yöntemin bağımsız değişkenleri varsa, bağımsız değişken değerlerini parantez içine yerleştirin. Bağımsız değişken olmadığında bile her yöntem çağrısı için parantezler gereklidir. Yöntemi birden çok bağımsız değişken alırsa, bunlar virgülle ayrılmalıdır.

Örneğin, aşağıdaki komut bilgisayardaki Not Defteri işlemini sonlandırmak için işlemlerin Kill yöntemini çağırır.

$notepad = Get-Process notepad
$notepad.Kill()

Bu örnek, yukarıdaki deyimler birleştirilerek kısaltılabilir.

(Get-Process Notepad).Kill()

Komutu Get-Process , Kill yöntemi çağrılmadan önce çalıştığından emin olmak için parantez içine alınır. Yöntemi Kill daha sonra döndürülen Process nesnede çağrılır.

Başka bir çok yararlı yöntem dizelerin yöntemidir Replace . Replace yöntemi, bir dize içindeki metni değiştirir. Aşağıdaki örnekte nokta (.) dizenin bitiş tırnak işaretinden hemen sonra yerleştirilebilir.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

Önceki örneklerde gösterildiği gibi, komutu, değişkendeki bir nesneyi veya nesneyle sonuçlanabilecek herhangi bir şeyi (tırnak içindeki bir dize gibi) kullanarak aldığınız nesne üzerinde bir yöntem çağırabilirsiniz.

PowerShell 4.0'dan başlayarak, dinamik yöntem adları kullanılarak yöntem çağırma desteklenir.

Yöntemler hakkında bilgi edinme

Bir nesnenin yöntemlerinin tanımlarını bulmak için, nesne türü için yardım konusuna gidin ve yöntemler sayfasını arayın. Örneğin, aşağıdaki sayfada System.Diagnostics.Process işlem nesnelerinin yöntemleri açıklanmaktadır.

Bir yöntemin bağımsız değişkenlerini belirlemek için, PowerShell cmdlet'inin söz dizimi diyagramına benzeyen yöntem tanımını gözden geçirin.

Yöntem tanımında, PowerShell cmdlet'lerinin parametre kümeleri gibi bir veya daha fazla yöntem imzası olabilir. İmzalar, yöntemini çağırmak için geçerli tüm komut biçimlerini gösterir.

Örneğin, CopyTo sınıfının yöntemi FileInfo aşağıdaki iki yöntem imzasını içerir:

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

İlk yöntem imzası hedef dosya adını (ve bir yolu) alır. Aşağıdaki örnek, dosyayı C:\Bin dizine kopyalamak Final.txt için ilk CopyTo yöntemi kullanır.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

Not

PowerShell'in bağımsız değişken modundan farklı olarak nesne yöntemleri, PowerShell'in üzerinde derlendiği .NET çerçevesine geçiş olan ifade modunda yürütülür. İfade modunda çarpık bağımsız değişkenlere (tırnaksız dizeler) izin verilmez. Bu farkı, bir yolu parametre olarak kullanırken ve yolu bağımsız değişken olarak kullanırken görebilirsiniz. about_Parsing'de ayrıştırma modları hakkında daha fazla bilgi edinebilirsiniz

İkinci yöntem imzası bir hedef dosya adı ve zaten varsa hedef dosyanın üzerine yazılıp yazılmayacağını belirleyen bir Boole değeri alır.

Aşağıdaki örnek, dosyayı C:\Bin dizine kopyalamak Final.txt ve var olan dosyaların üzerine yazmak için ikinci CopyTo yöntemi kullanır.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

Üye erişim sabit listesi

PowerShell 3.0'dan başlayarak, liste koleksiyonunda bulunmayan bir yönteme erişmek için üye erişim işlecini (.) kullandığınızda, PowerShell koleksiyondaki öğeleri otomatik olarak numaralandırır ve her öğede yöntemini çağırır. Daha fazla bilgi için bkz . about_Member-Access_Enumeration.

Örnekler

Aşağıdaki örnek, bir nesne koleksiyonundaki tek tek işlem nesnelerinin Kill yöntemini çalıştırır.

İlk komut, Not Defteri işleminin üç örneğini başlatır. Get-ProcessNot Defteri işleminin üç örneğini de alır ve değişkene $p kaydeder.

Notepad; Notepad; Notepad
$p = Get-Process Notepad
$p.Count
3

Sonraki komut, değişkendeki üç işlemde de $p Kill yöntemini çalıştırır. Bu komut, bir işlem koleksiyonunun bir Kill yöntemi olmasa bile çalışır.

$p.Kill()
Get-Process Notepad

komutu yöntemin Get-ProcessKill çalıştığını onaylar.

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

Bu örnek, yöntemini koleksiyondaki her nesnede Foreach-Object çalıştırmak için cmdlet'ini kullanmaya işlevsel olarak eşdeğerdir.

$p | ForEach-Object {$_.Kill()}

ForEach ve Where yöntemleri

PowerShell 4.0'da başlayarak, yöntem söz dizimi kullanılarak koleksiyon filtrelemesi desteklenir. Bu, ve Wherekoleksiyonlarıyla ForEach ilgilenirken iki yeni yöntemin kullanılmasına olanak tanır.

Bu yöntemler hakkında daha fazla bilgiyi about_arrays

Birden çok aşırı yükleme olduğunda belirli bir yöntemi çağırma

.NET yöntemlerini çağırırken aşağıdaki senaryoyu göz önünde bulundurun. Bir yöntem bir nesneyi alır ancak daha belirli bir tür alan bir arabirim aracılığıyla aşırı yüklenmişse, PowerShell nesneyi açıkça bu arabirime atamadığınız sürece nesneyi kabul eden yöntemi seçer.

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}";
   }

}
'@

Bu örnekte Çubuk yönteminin daha az özgül object aşırı yüklemesi seçilmişti.

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

Bu örnekte, Bar yönteminin daha belirgin aşırı yüklemesini seçmek için yöntemini IFoo arabirimine dönüştüreceğiz.

([IFoo] [Foo]::new()).Bar(1)
int: 1

Dosya sistemi yollarını kullanan .NET yöntemlerini kullanma

PowerShell, işlem başına birden çok çalışma alanı destekler. Her çalışma alanının kendi geçerli dizini vardır. Bu, geçerli işlemin çalışma diziniyle aynı değildir: [System.Environment]::CurrentDirectory.

.NET yöntemleri işlem çalışma dizinini kullanır. PowerShell cmdlet'leri Runspace konumunu kullanır. Ayrıca. .NET yöntemleri PowerShell Yolu nesneleriyle değil yalnızca yerel dosya sistemi yollarıyla çalışır. PowerShell yollarını .NET yöntemleriyle kullanmak için, .NET yöntemine geçirmeden önce dosya sistemi yerel yolunu çözümlemeniz gerekir.

Ayrıca bkz.