Aracılığıyla paylaş


Cmdlet’inize Kullanıcı İletileri Ekleme

Cmdlet'ler, Windows PowerShell çalışma zamanı tarafından kullanıcıya görüntülenebilen çeşitli türde iletiler yazabilir. Bu iletiler aşağıdaki türleri içerir:

  • Genel kullanıcı bilgilerini içeren ayrıntılı iletiler.

  • Sorun giderme bilgilerini içeren iletilerde hata ayıklama.

  • Cmdlet'in beklenmeyen sonuçlara sahip olabilecek bir işlem gerçekleştirmek üzere olduğunu belirten bir bildirim içeren uyarı iletileri.

  • uzun süren bir işlem gerçekleştirilirken cmdlet'in ne kadar çalışma tamamlandığı hakkında bilgi içeren ilerleme raporu iletileri.

Cmdlet'inizin yazabileceği ileti sayısı veya cmdlet'inizin yazabileceği ileti türüyle ilgili bir sınır yoktur. Her ileti, cmdlet'inizin giriş işleme yöntemi içinden belirli bir çağrı yapılarak yazılır.

Cmdlet'i tanımlama

Cmdlet oluşturmanın ilk adımı her zaman cmdlet'ini adlandırmak ve cmdlet'i uygulayan .NET sınıfını bildirmektir. Her tür cmdlet, giriş işleme yöntemlerinden kullanıcı bildirimleri yazabilir; bu nedenle, genel olarak, cmdlet'in hangi sistem değişikliklerini gerçekleştirdiğini gösteren herhangi bir fiil kullanarak bu cmdlet'i adlandırabilirsiniz. Onaylanan cmdlet fiilleri hakkında daha fazla bilgi için bkz. Cmdlet Fiil Adları.

Stop-Proc cmdlet'i sistemi değiştirmek için tasarlanmıştır; bu nedenle, .NET sınıfı için System.Management.Automation.CmdletAttribute bildiriminin SupportsShouldProcess öznitelik anahtar sözcüğünü içermesi ve trueolarak ayarlanması gerekir.

Aşağıdaki kod, bu Stop-Proc cmdlet sınıfının tanımıdır. Bu tanım hakkında daha fazla bilgi için bkz. SystemDeğiştiren Bir Cmdlet Oluşturma .

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

Sistem Değişikliği için Parametreleri Tanımlama

Stop-Proc cmdlet'i üç parametre tanımlar: Name, Forceve PassThru. Bu parametreleri tanımlama hakkında daha fazla bilgi için bkz. SystemDeğiştiren Bir Cmdlet Oluşturma .

Stop-Proc cmdlet'i için parametre bildirimi aşağıdadır.

[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true
)]
public string[] Name
{
  get { return processNames; }
  set { processNames = value; }
}
private string[] processNames;

/// <summary>
/// Specify the Force parameter that allows the user to override
/// the ShouldContinue call to force the stop operation. This
/// parameter should always be used with caution.
/// </summary>
[Parameter]
public SwitchParameter Force
{
  get { return force; }
  set { force = value; }
}
private bool force;

/// <summary>
/// Specify the PassThru parameter that allows the user to specify
/// that the cmdlet should pass the process object down the pipeline
/// after the process has been stopped.
/// </summary>
[Parameter]
public SwitchParameter PassThru
{
  get { return passThru; }
  set { passThru = value; }
}
private bool passThru;

Giriş İşleme Yöntemini Geçersiz Kılma

Cmdlet'inizin bir giriş işleme yöntemini geçersiz kılması gerekir; çoğu zaman System.Management.Automation.Cmdlet.ProcessRecordolur. Bu Stop-Proc cmdlet'i, System.Management.Automation.Cmdlet.ProcessRecord giriş işleme yöntemini geçersiz kılar. Stop-Proc cmdlet'inin bu uygulamasında ayrıntılı iletiler, hata ayıklama iletileri ve uyarı iletileri yazmak için çağrılar yapılır.

Uyarı

Bu yöntemin System.Management.Automation.Cmdlet.ShouldProcess ve System.Management.Automation.Cmdlet.ShouldContinue yöntemlerini nasıl çağırdığını hakkında daha fazla bilgi için bkz. SystemDeğiştiren Bir Cmdlet Oluşturma.

Ayrıntılı İleti Yazma

System.Management.Automation.Cmdlet.WriteVerbose yöntemi, belirli hata koşullarıyla ilgili olmayan genel kullanıcı düzeyi bilgileri yazmak için kullanılır. Sistem yöneticisi daha sonra bu bilgileri kullanarak diğer komutları işlemeye devam edebilir. Ayrıca, bu yöntem kullanılarak yazılan tüm bilgiler gerektiğinde yerelleştirilmelidir.

Bu Stop-Proc cmdlet'inden alınan aşağıdaki kod, System.Management.Automation.Cmdlet.ProcessRecord yönteminin geçersiz kılınarak System.Management.Automation.Cmdlet.WriteVerbose yöntemine yapılan iki çağrıyı gösterir.

message = String.Format("Attempting to stop process \"{0}\".", name);
WriteVerbose(message);
message = String.Format("Stopped process \"{0}\", pid {1}.",
                        processName, process.Id);

WriteVerbose(message);

Hata Ayıklama İletisi Yazma

System.Management.Automation.Cmdlet.WriteDebug yöntemi, cmdlet'in çalışmasını gidermek için kullanılabilecek hata ayıklama iletileri yazmak için kullanılır. Çağrı bir giriş işleme yönteminden yapılır.

Uyarı

Windows PowerShell ayrıca hem ayrıntılı hem de hata ayıklama bilgilerini sunan bir Debug parametresi tanımlar. Cmdlet'iniz bu parametreyi destekliyorsa, System.Management.Automation.Cmdlet.WriteVerboseçağıran kodda System.Management.Automation.Cmdlet.WriteDebug çağırması gerekmez.

Örnek Stop-Proc cmdlet'indeki kodun aşağıdaki iki bölümü, System.Management.Automation.Cmdlet.ProcessRecord yönteminin geçersiz kılınarak System.Management.Automation.Cmdlet.WriteDebug yöntemine yapılan çağrıları gösterir.

Bu hata ayıklama iletisi, System.Management.Automation.Cmdlet.ShouldProcess çağrılmadan hemen önce yazılır.

message =
          String.Format("Acquired name for pid {0} : \"{1}\"",
                       process.Id, processName);
WriteDebug(message);

Bu hata ayıklama iletisi, System.Management.Automation.Cmdlet.WriteObject çağrılmadan hemen önce yazılır.

message =
         String.Format("Writing process \"{0}\" to pipeline",
         processName);
WriteDebug(message);
WriteObject(process);

Windows PowerShell, tüm System.Management.Automation.Cmdlet.WriteDebug çağrılarını izleme altyapısına ve cmdlet'lerine otomatik olarak yönlendirir. Bu, cmdlet'i içinde herhangi bir ek geliştirme çalışması yapmanıza gerek kalmadan yöntem çağrılarının barındırma uygulamasına, dosyaya veya hata ayıklayıcıya izlenmesini sağlar. Aşağıdaki komut satırı girdisi bir izleme işlemi uygular.

ps> Trace-Expression Stop-Proc -File proc.log -Command Stop-Proc not defteri

Uyarı İletisi Yazma

System.Management.Automation.Cmdlet.WriteWarning yöntemi, cmdlet beklenmeyen bir sonuçla sonuçlanabilecek bir işlem gerçekleştirmek üzereyken (örneğin, salt okunur bir dosyanın üzerine yazma) uyarı yazmak için kullanılır.

Örnek Stop-Proc cmdlet'inden alınan aşağıdaki kod, System.Management.Automation.Cmdlet.ProcessRecord yönteminin geçersiz kılınan System.Management.Automation.Cmdlet.WriteWarning yöntemine yapılan çağrıyı gösterir.

 if (criticalProcess)
 {
   message =
             String.Format("Stopping the critical process \"{0}\".",
                           processName);
   WriteWarning(message);
} // if (criticalProcess...

İlerleme İletisi Yazma

System.Management.Automation.Cmdlet.WriteProgress, cmdlet işlemlerinin tamamlanması uzun zaman kullandığında ilerleme iletileri yazmak için kullanılır. System.Management.Automation.Cmdlet.WriteProgress çağrısı, kullanıcıya işlenmesi için barındırma uygulamasına gönderilen bir System.Management.Automation.Progressrecord nesnesi geçirir.

Uyarı

Bu Stop-Proc cmdlet'i, System.Management.Automation.Cmdlet.WriteProgress yöntemine çağrı içermez.

Aşağıdaki kod, bir öğeyi kopyalamaya çalışan bir cmdlet tarafından yazılmış bir ilerleme iletisi örneğidir.

int myId = 0;
string myActivity = "Copy-item: Copying *.* to C:\abc";
string myStatus = "Copying file bar.txt";
ProgressRecord pr = new ProgressRecord(myId, myActivity, myStatus);
WriteProgress(pr);

pr.RecordType = ProgressRecordType.Completed;
WriteProgress(pr);

Kod Örneği

C# örnek kodunun tamamı için bkz. StopProcessSample02 Örnek.

Nesne Türlerini ve Biçimlendirmeyi Tanımlama

Windows PowerShell, .NET nesnelerini kullanarak cmdlet'ler arasında bilgi geçirir. 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 gerekebilir. Yeni türleri tanımlama veya var olan türleri genişletme hakkında daha fazla bilgi için bkz. Nesne Türlerini Genişletme ve Biçimlendirme.

Cmdlet'i oluşturma

Bir cmdlet uygulandıktan sonra, bir Windows PowerShell ek bileşeni aracılığıyla Windows PowerShell'e kaydedilmesi 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'e kaydedildiğinde, komut satırında çalıştırarak bunu test edebilirsiniz. Şimdi örnek Stop-Proc cmdlet'ini test edelim. Komut satırından cmdlet'leri kullanma hakkında daha fazla bilgi için bkz. Windows PowerShell ile Çalışmaya Başlama .

  • Aşağıdaki komut satırı girdisi, "NOT DEFTERI" adlı işlemi durdurmak, ayrıntılı bildirimler sağlamak ve hata ayıklama bilgilerini yazdırmak için Stop-Proc kullanır.

    PS> Stop-Proc -Name notepad -Verbose -Debug
    

    Aşağıdaki çıkış görüntülenir.

    VERBOSE: Attempting to stop process " notepad ".
    DEBUG: Acquired name for pid 5584 : "notepad"
    
    Confirm
    Continue with this operation?
    [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): Y
    
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (5584)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    VERBOSE: Stopped process "notepad", pid 5584.
    

Ayrıca Bkz.

Sistem Değiştiren Bir Cmdlet Oluşturma

Windows PowerShell Cmdlet Oluşturma

Nesne Türlerini ve Biçimlendirme Genişletmeyi

Cmdlet'leri, Sağlayıcıları ve Konak Uygulamalarını Kaydetme

Windows PowerShell SDK