Parametresiz Cmdlet Oluşturma
Bu bölümde, parametrelerin kullanımı olmadan yerel bilgisayardan bilgi alan ve ardından bilgileri işlem hattına yazan bir cmdlet'in nasıl oluşturularak ilgili bilgiler açıklandı. Burada açıklanan cmdlet, Get-Proc işlemleri hakkında bilgi alan ve ardından bu bilgileri komut satırına görüntüleyen bir cmdlet'tir.
Not
Cmdlet'ler yazarken, Windows PowerShell® başvuru derlemelerinin diske indirilir (varsayılan olarak C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 konumunda). Bunlar Genel Derleme Önbelleği'ne (GAC) yüklenmez.
Cmdlet'i adlandırma
Cmdlet adı, cmdlet'in sıyrı eylemi belirten bir fiil ve cmdlet'in üzerinde işlemde olduğu öğeleri gösteren bir isim içerir. Bu örnek Get-Proc cmdlet'i işlem nesnelerini kullandığı için System.Management.Automation.Verbscommon numaralama ile tanımlanan "Get" fiilini ve cmdlet'in işlem öğeleri üzerinde çalıştığını belirtmek için "Proc" adı kullanılır.
Cmdlet'leri adlandırıyorken şu karakterlerden birini kullanmayın: # , () {} [] & - /\ $ ; : " '<> | ? @ ` .
Bir un seçme
Belirli bir ism seçmeniz gerekir. Ürün adının kısaltılmış bir sürümüyle önekli tekil bir isim kullanmak en iyisidir. Bu türe örnek bir cmdlet adı : Get-SQLServer
" ".
Fiil Seçme
Onaylanan cmdlet fiil adları kümesinden bir fiil kullan gerekir. Onaylanan cmdlet fiilleri hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.
Cmdlet Sınıfını Tanımlama
Bir cmdlet adı seçtikten sonra, cmdlet'i uygulamak için bir .NET sınıfı tanımlayın. Bu örnek cmdlet'in sınıf tanımı Get-Proc:
[Cmdlet(VerbsCommon.Get, "Proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Sınıf tanımına göre, söz dizimi ile System.Management.Automation.CmdletAttribute özniteliğinin bu sınıfı cmdlet olarak tanımlamak için [Cmdlet(verb, noun, ...)]
kullanılır. Bu, tüm cmdlet'ler için gereken tek özniteliktir ve Windows PowerShell çalışma zamanının bunları doğru çağırmalarına olanak sağlar. Gerekirse sınıfını daha fazla bildirecek öznitelik anahtar sözcüklerini ayarlayın. Örnek GetProcCommand sınıfımız için öznitelik bildiriminin, cmdlet'i için yalnızca isim ve fiil Get-Proc farkında kalın.
Not
Tüm Windows PowerShell sınıflarında, ayaryabilirsiniz anahtar sözcükler öznitelik sınıfının özelliklerine karşılık gelir.
cmdlet'inin sınıfını adlandırarak sınıf adına cmdlet adını yansıtmak iyi bir uygulamadır. Bunu yapmak için "FiilNounCommand" formunu kullanın ve "Fiil" ve "İsim" yerine cmdlet adı olarak kullanılan fiil ve isim yazın. Önceki sınıf tanımında gösterildiği gibi, örnek Get-Proc cmdlet'i System.Management.Automation.Cmdlet temel sınıfından türeten GetProcCommand adlı bir sınıf tanımlar.
Önemli
Windows PowerShell çalışma zamanlarına doğrudan erişen bir cmdlet tanımlamak için .NET sınıfını System.Management.Automation.PSCmdlet temel sınıfından türetebilirsiniz. Bu sınıf hakkında daha fazla bilgi için, bkz. Creating a Cmdlet that Defines Parameter Sets.
Not
Bir cmdlet'in sınıfı açıkça public olarak işaretlenir. Genel olarak işaretlenen sınıflar varsayılan olarak iç sınıftır ve varsayılan olarak Windows PowerShell tarafından bulunmayacaktır.
Windows PowerShell, cmdlet sınıfları için Microsoft.PowerShell.Commands ad alanını kullanır. Cmdlet sınıflarınızı API ad alanınıza (örneğin, xxx.PS.Commands) komutlar ad alanına yer vermek önerilir.
Giriş İşleme Yöntemini Geçersiz Kılma
System.Management.Automation.Cmdlet sınıfı, cmdlet'inizin geçersiz k olduğu üç ana giriş işleme yöntemi sağlar. Kayıt işleme hakkında daha fazla Windows PowerShell için bkz. How Windows PowerShell Works.
Tüm giriş türleri için, Windows PowerShell çalışma zamanı System.Management.Automation.Cmdlet.BeginProcessing'i çağırarak işlemeyi etkinleştirir. Cmdlet'inizin bazı ön işlem veya kurulum işlemleri gerçekleştirmesi gerekirse, bu yöntemi geçersiz karak bunu gerçekleştirebilirsiniz.
Not
Windows PowerShell cmdlet çağrıldıken sağlanan parametre değerleri dizilerini açıklamak için "kayıt" terimini kullanır.
Cmdlet'iniz işlem hattı girişini kabul ediyorsa, System.Management.Automation.Cmdlet.ProcessRecord yöntemini ve isteğe bağlı olarak System.Management.Automation.Cmdlet.EndProcessing yöntemini geçersiz kılması gerekir. Örneğin, bir cmdlet, System.Management.Automation.Cmdlet.ProcessRecord kullanarak tüm girişleri toplar ve ardından cmdlet'in yaptığı gibi tek bir öğe yerine giriş üzerinde bir bütün olarak çalışırsa her iki yöntemi de geçersiz Sort-Object
kabilirsiniz.
Cmdlet'iniz işlem hattı girişini almıyorsa System.Management.Automation.Cmdlet.EndProcessing yöntemini geçersiz kılması gerekir. Bu yöntemin, sıralama cmdlet'i için olduğu gibi, cmdlet'i aynı anda tek bir öğe üzerinde çalışamaysa da Sıklıkla System.Management.Automation.Cmdlet.BeginProcessing yerine kullanılır.
Bu örnek Get-Proc cmdlet'i işlem hattı girişini alsa da System.Management.Automation.Cmdlet.ProcessRecord yöntemini geçersiz kılar ve System.Management.Automation.Cmdlet.BeginProcessing ve System.Management.Automation.Cmdlet.EndProcessingiçin varsayılan uygulamaları kullanır. System.Management.Automation.Cmdlet.ProcessRecord geçersiz kılma işlemi alır ve System.Management.Automation.Cmdlet.WriteObject yöntemini kullanarak bunları komut satırına yazar.
protected override void ProcessRecord()
{
// Get the current processes
Process[] processes = Process.GetProcesses();
// Write the processes to the pipeline making them available
// to the next cmdlet. The second parameter of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(processes, true);
}
Protected Overrides Sub ProcessRecord()
'/ Get the current processes.
Dim processes As Process()
processes = Process.GetProcesses()
'/ Write the processes to the pipeline making them available
'/ to the next cmdlet. The second parameter of this call tells
'/ PowerShell to enumerate the array, and send one process at a
'/ time to the pipeline.
WriteObject(processes, True)
End Sub 'ProcessRecord
Giriş İşleme Hakkında Anımsanacak Şeyler
Giriş için varsayılan kaynak, kullanıcı tarafından komut satırı üzerinde sağlanan açık bir nesnedir (örneğin, dize). Daha fazla bilgi için, bkz. Creating a Cmdlet to Process Command Line Input.
Giriş işleme yöntemi, işlem hattında bir yukarı akış cmdlet'inin çıkış nesnesinden de giriş alır. Daha fazla bilgi için bkz. İşlem Hattı Girişini İşlemek için Cmdlet Oluşturma. Cmdlet'inizin komut satırı ve işlem hattı kaynaklarının birleşiminden giriş ala bir araya geldi.
Aşağı akış cmdlet'i uzun bir süre geri dönmez veya hiç dönmez. Bu nedenle, cmdlet'inizin giriş işleme yöntemi System.Management.Automation.Cmdlet.WriteObjectçağrıları sırasında kilitleri tutmaz; özellikle kapsamın cmdlet örneğinin ötesine genişletilen kilitleri kilitler.
Önemli
Cmdlet'ler hiçbir zaman System.Console.Writeline* veya eşdeğerini çağırmaz.
- Cmdlet'inizin işlemesi tamamlandığında temizlenmesi gereken nesne değişkenleri olabilir (örneğin, System.Management.Automation.Cmdlet.BeginProcessing yönteminde bir dosya tanıtıcısı açarsa ve tanıtıcıyı System.Management.Automation.Cmdlet.ProcessRecordtarafından kullanmak üzere açık tutarsa). Windows PowerShell çalışma zamanının her zaman nesne temizleme gerçekleştirmesi gereken System.Management.Automation.Cmdlet.EndProcessing yöntemini çağırmadiğini unutmayın.
Örneğin, cmdlet ortası iptal edilirse veya cmdlet'in herhangi bir bölümünde sonlandırıcı bir hata oluşursa System.Management.Automation.Cmdlet.EndProcessing çağrılmayabiliyor. Bu nedenle, nesne temizleme gerektiren bir cmdlet, sonlandırıcı dahil olmak üzere tam System.IDisposable desenini uygulamalı, böylece çalışma zamanı işleme sonunda hem System.Management.Automation.Cmdlet.EndProcessing hem de System.IDisposable.Dispose* çağırabilir.
Kod Örneği
Tam C# örnek kodu için bkz. GetProcessSample01 Örneği.
Nesne Türlerini ve Biçimlendirmeyi Tanımlama
Windows PowerShell.NET nesnelerini kullanarak cmdlet'ler arasında bilgi iletir. Sonuç olarak, bir cmdlet'in kendi türünü tanımlaması veya cmdlet'in başka bir cmdlet tarafından sağlanan mevcut bir türü genişletmesi gerekir. Yeni türleri tanımlama veya mevcut türleri genişletme hakkında daha fazla bilgi için bkz. Nesne Türlerini Genişletme ve Biçimlendirme.
Cmdlet'i Bina
Cmdlet'i uygulayan bir Windows PowerShell ek bileşeni Windows PowerShell gerekir. Cmdlet'leri kaydetme hakkında daha fazla bilgi için bkz. Cmdlet'leri, Sağlayıcıları ve Konak Uygulamalarını Kaydetme.
Cmdlet'i Test Etme
Cmdlet'iniz Windows PowerShell komut satırı üzerinde çalıştırarak test etmek için. Örnek Get-Proc cmdlet'imizin kodu küçüktür, ancak yine de Windows PowerShell çalışma zamanı ve mevcut bir .NET nesnesini kullanır. Bu da onu kullanışlı hale almak için yeterlidir. Şimdi bu testi test etmek için Get-Proc ve çıktının nasıl kullanılal olduğunu daha iyi anlıyoruz. Komut satırı cmdlet'lerini kullanma hakkında daha fazla bilgi için Başlarken ile Windows PowerShell.
Windows PowerShell başlatın ve bilgisayarda çalışan geçerli işlemleri elde edin.
get-proc
Aşağıdaki çıkış görüntülenir.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ---------- 254 7 7664 12048 66 173.75 1200 QCTRAY 32 2 1372 2628 31 0.04 1860 DLG 271 6 1216 3688 33 0.03 3816 lg 27 2 560 1920 24 0.01 1768 TpScrex ...
Daha kolay işleme için cmdlet sonuçlarına bir değişken atlayın.
$p=get-proc
İşlem sayısını elde.
$p.length
Aşağıdaki çıkış görüntülenir.
63
Belirli bir işlemi alma.
$p[6]
Aşağıdaki çıkış görüntülenir.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1033 3 2400 3336 35 0.53 1588 rundll32
Bu sürecin başlangıç saati.
$p[6].starttime
Aşağıdaki çıkış görüntülenir.
Tuesday, July 26, 2005 9:34:15 AM
$p[6].starttime.dayofyear
207
Tanıtıcı sayısı 500'den büyük olan işlemleri almak ve sonucu sıralamak.
$p | Where-Object {$_.HandleCount -gt 500 } | Sort-Object HandleCount
Aşağıdaki çıkış görüntülenir.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ---------- 568 14 2164 4972 39 5.55 824 svchost 716 7 2080 5332 28 25.38 468 csrss 761 21 33060 56608 440 393.56 3300 WINWORD 791 71 7412 4540 59 3.31 492 winlogon ...
Get-Member
Cmdlet'ini kullanarak her işlem için kullanılabilir özellikleri listele.$p | Get-Member -MemberType property
TypeName: System.Diagnostics.Process
Aşağıdaki çıkış görüntülenir.
Name MemberType Definition ---- ---------- ---------- BasePriority Property System.Int32 BasePriority {get;} Container Property System.ComponentModel.IContainer Conta... EnableRaisingEvents Property System.Boolean EnableRaisingEvents {ge... ...
Ayrıca Bkz.
Komut Satırı Girişini İşlemek için Cmdlet Oluşturma
İşlem Hattı Girişini İşlemek için Cmdlet Oluşturma
Windows PowerShell Cmdlet'i Oluşturma
Nesne Türlerini ve Biçimlendirmeyi Genişletme
Windows PowerShell Nasıl Çalışır?
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin