Freigeben über


Hinzufügen von Benutzermeldungen zum Cmdlet

Cmdlets können verschiedene Arten von Nachrichten schreiben, die dem Benutzer über die Windows PowerShell-Laufzeit angezeigt werden können. Zu diesen Nachrichten gehören die folgenden Typen:

  • Ausführliche Nachrichten, die allgemeine Benutzerinformationen enthalten.

  • Debuggen Sie Nachrichten, die Informationen zur Problembehandlung enthalten.

  • Warnmeldungen, die eine Benachrichtigung enthalten, dass das Cmdlet einen Vorgang ausführt, der unerwartete Ergebnisse aufweisen kann.

  • Statusberichtsmeldungen, die Informationen darüber enthalten, wie viel Arbeit das Cmdlet abgeschlossen hat, wenn ein Vorgang ausgeführt wird, der lange dauert.

Es gibt keine Beschränkungen für die Anzahl der Nachrichten, die ihr Cmdlet schreiben kann, oder den Typ der Nachrichten, die Ihr Cmdlet schreibt. Jede Nachricht wird durch einen bestimmten Aufruf innerhalb der Eingabeverarbeitungsmethode Ihres Cmdlets geschrieben.

Definieren des Cmdlets

Der erste Schritt beim Erstellen von Cmdlets ist immer das Benennen des Cmdlets und das Deklarieren der .NET-Klasse, die das Cmdlet implementiert. Jede Art von Cmdlet kann Benutzerbenachrichtigungen aus den Eingabeverarbeitungsmethoden schreiben; Im Allgemeinen können Sie dieses Cmdlet mit einem beliebigen Verb benennen, das angibt, welche Systemänderungen das Cmdlet ausführt. Weitere Informationen zu genehmigten Cmdlet-Verben finden Sie unter Cmdlet Verb Names.

Das Cmdlet Stop-Proc wurde entwickelt, um das System zu ändern; Daher muss die System.Management.Automation.CmdletAttribute Deklaration für die .NET-Klasse das Schlüsselwort SupportsShouldProcess Attribut enthalten und auf truefestgelegt werden.

Der folgende Code ist die Definition für diese Stop-Proc Cmdlet-Klasse. Weitere Informationen zu dieser Definition finden Sie unter Erstellen eines Cmdlets, das das System-ändert.

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

Definieren von Parametern für die Systemänderung

Das Cmdlet Stop-Proc definiert drei Parameter: Name, Forceund PassThru. Weitere Informationen zum Definieren dieser Parameter finden Sie unter Erstellen eines Cmdlets, das das Systemändert.

Dies ist die Parameterdeklaration für das Cmdlet Stop-Proc.

[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;

Überschreiben einer Eingabeverarbeitungsmethode

Das Cmdlet muss eine Eingabeverarbeitungsmethode außer Kraft setzen, meistens ist es System.Management.Automation.Cmdlet.ProcessRecord. Mit diesem Stop-Proc Cmdlet wird die System.Management.Automation.Cmdlet.ProcessRecord Eingabeverarbeitungsmethode außer Kraft gesetzt. In dieser Implementierung des Cmdlets Stop-Proc werden Aufrufe zum Schreiben ausführlicher Nachrichten, Debuggen von Nachrichten und Warnmeldungen durchgeführt.

Hinweis

Weitere Informationen dazu, wie diese Methode die methoden System.Management.Automation.Cmdlet.ShouldProcess und System.Management.Automation.Cmdlet.ShouldContinue aufruft, finden Sie unter Erstellen eines Cmdlets, das das Systemändert.

Schreiben einer ausführlichen Nachricht

Die System.Management.Automation.Cmdlet.WriteVerbose Methode wird verwendet, um allgemeine Informationen auf Benutzerebene zu schreiben, die nicht mit bestimmten Fehlerbedingungen zusammenhängen. Der Systemadministrator kann diese Informationen dann verwenden, um die Verarbeitung anderer Befehle fortzusetzen. Darüber hinaus sollten alle informationen, die mit dieser Methode geschrieben wurden, nach Bedarf lokalisiert werden.

Der folgende Code aus diesem Stop-Proc-Cmdlet zeigt zwei Aufrufe der System.Management.Automation.Cmdlet.WriteVerbose Methode aus der Außerkraftsetzung der System.Management.Automation.Cmdlet.ProcessRecord-Methode.

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

WriteVerbose(message);

Schreiben einer Debugnachricht

Die System.Management.Automation.Cmdlet.WriteDebug Methode wird verwendet, um Debugmeldungen zu schreiben, die zum Behandeln des Vorgangs des Cmdlets verwendet werden können. Der Aufruf erfolgt über eine Eingabeverarbeitungsmethode.

Hinweis

Windows PowerShell definiert auch einen Debug-Parameter, der ausführliche und Debuginformationen darstellt. Wenn Ihr Cmdlet diesen Parameter unterstützt, muss nicht System.Management.Automation.Cmdlet.WriteDebug- im selben Code aufgerufen werden, der System.Management.Automation.Cmdlet.WriteVerboseaufruft.

In den folgenden beiden Codeabschnitten aus dem Beispiel-Stop-Proc Cmdlet werden Aufrufe der System.Management.Automation.Cmdlet.WriteDebug Methode aus der Außerkraftsetzung der System.Management.Automation.Cmdlet.ProcessRecord-Methode angezeigt.

Diese Debugnachricht wird unmittelbar geschrieben, bevor System.Management.Automation.Cmdlet.ShouldProcess aufgerufen wird.

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

Diese Debugnachricht wird unmittelbar vor dem Aufruf System.Management.Automation.Cmdlet.WriteObject- geschrieben.

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

Windows PowerShell leitet automatisch alle System.Management.Automation.Cmdlet.WriteDebug Aufrufe an die Ablaufverfolgungsinfrastruktur und -cmdlets weiter. Dadurch können die Methodenaufrufe auf die Hostinganwendung, eine Datei oder einen Debugger nachverfolgt werden, ohne dass Sie zusätzliche Entwicklungsaufgaben innerhalb des Cmdlets ausführen müssen. Der folgende Befehlszeileneintrag implementiert einen Ablaufverfolgungsvorgang.

PS> Trace-Expression Stop-Proc -File proc.log -Command Stop-Proc Editor-

Schreiben einer Warnmeldung

Die System.Management.Automation.Cmdlet.WriteWarning Methode wird verwendet, um eine Warnung zu schreiben, wenn das Cmdlet einen Vorgang ausführt, der zu einem unerwarteten Ergebnis führen könnte, z. B. das Überschreiben einer schreibgeschützten Datei.

Der folgende Code aus dem Beispiel-Stop-Proc-Cmdlet zeigt den Aufruf des System.Management.Automation.Cmdlet.WriteWarning Methode aus der Außerkraftsetzung der System.Management.Automation.Cmdlet.ProcessRecord-Methode.

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

Schreiben einer Statusmeldung

Die System.Management.Automation.Cmdlet.WriteProgress wird verwendet, um Statusmeldungen zu schreiben, wenn Cmdlet-Vorgänge eine längere Zeit in Anspruch nehmen. Ein Aufruf von System.Management.Automation.Cmdlet.WriteProgress übergibt ein System.Management.Automation.Progressrecord-Objekt, das an die Hostanwendung zum Rendern an den Benutzer gesendet wird.

Hinweis

Dieses Stop-Proc-Cmdlet enthält keinen Aufruf der System.Management.Automation.Cmdlet.WriteProgress-Methode.

Der folgende Code ist ein Beispiel für eine Statusmeldung, die von einem Cmdlet geschrieben wurde, das versucht, ein Element zu kopieren.

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);

Codebeispiel

Den vollständigen C#-Beispielcode finden Sie unter StopProcessSample02 Sample.

Definieren von Objekttypen und Formatierungen

Windows PowerShell übergibt Informationen zwischen Cmdlets mithilfe von .NET-Objekten. Daher muss ein Cmdlet möglicherweise einen eigenen Typ definieren, oder das Cmdlet muss einen vorhandenen Typ erweitern, der von einem anderen Cmdlet bereitgestellt wird. Weitere Informationen zum Definieren neuer Typen oder zum Erweitern vorhandener Typen finden Sie unter Erweitern von Objekttypen und Formatierungen.

Erstellen des Cmdlets

Nach der Implementierung eines Cmdlets muss es über ein Windows PowerShell-Snap-In bei Windows PowerShell registriert werden. Weitere Informationen zum Registrieren von Cmdlets finden Sie unter Registrieren von Cmdlets, Anbietern und Hostanwendungen.

Testen des Cmdlets

Wenn Ihr Cmdlet bei Windows PowerShell registriert wurde, können Sie es testen, indem Sie es in der Befehlszeile ausführen. Testen wir das Beispiel-Stop-Proc Cmdlet. Weitere Informationen zur Verwendung von Cmdlets über die Befehlszeile finden Sie in der Erste Schritte mit Windows PowerShell.

  • Der folgende Befehlszeileneintrag verwendet Stop-Proc, um den Prozess mit dem Namen "NOTEPAD" zu beenden, ausführliche Benachrichtigungen bereitzustellen und Debuginformationen zu drucken.

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

    Die folgende Ausgabe wird angezeigt.

    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.
    

Siehe auch

Erstellen eines Cmdlets, das das System

Erstellen eines Windows PowerShell-Cmdlets

Erweitern von Objekttypen und Formatierungen

Registrieren von Cmdlets, Anbietern und Hostanwendungen

Windows PowerShell SDK-