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ı, 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-Process
Not 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-Process
Kill
ç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 Where
koleksiyonları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.
PowerShell