Freigeben über


Cmdlet-Übersicht

Ein Cmdlet ist ein einfacher Befehl, der in der PowerShell-Umgebung verwendet wird. Die PowerShell-Laufzeit ruft diese Cmdlets im Kontext von Automatisierungsskripts auf, die an der Befehlszeile bereitgestellt werden. Die PowerShell-Laufzeit ruft sie auch programmgesteuert über PowerShell-APIs auf.

Cmdlets

Cmdlets führen eine Aktion aus und geben in der Regel ein Microsoft .NET-Objekt an den nächsten Befehl in der Pipeline zurück. Ein Cmdlet ist ein einzelner Befehl, der an der Pipelinesemantik von PowerShell teilnimmt. Dazu gehören binäre Cmdlets (C#), erweiterte Skriptfunktionen, CDXML und Workflows.

In dieser SDK-Dokumentation wird beschrieben, wie Binäre Cmdlets erstellt werden, die in C# geschrieben wurden. Informationen zu skriptbasierten Cmdlets finden Sie unter:

Zum Erstellen eines binären Cmdlets müssen Sie eine Cmdlet-Klasse implementieren, die von einer von zwei spezialisierten Cmdlet-Basisklassen abgeleitet wird. Die abgeleitete Klasse muss:

  • Deklarieren Sie ein Attribut, das die abgeleitete Klasse als Cmdlet identifiziert.
  • Definieren Sie öffentliche Eigenschaften, die mit Attributen versehen sind, die die öffentlichen Eigenschaften als Cmdlet-Parameter identifizieren.
  • Überschreiben Sie eine oder mehrere der Eingabeverarbeitungsmethoden zum Verarbeiten von Datensätzen.

Sie können die Assembly, die die Klasse enthält, direkt mithilfe des Cmdlets Import-Module laden, oder Sie können eine Hostanwendung erstellen, die die Assembly mithilfe der System.Management.Automation.Runspaces.InitialSessionState API lädt. Beide Methoden bieten programmgesteuerten und Befehlszeilenzugriff auf die Funktionalität des Cmdlets.

Cmdlet-Begriffe

Die folgenden Begriffe werden häufig in der PowerShell-Cmdlet-Dokumentation verwendet:

Cmdlet-Attribut

Ein .NET-Attribut, das zum Deklarieren einer Cmdlet-Klasse als Cmdlet verwendet wird. Obwohl PowerShell mehrere andere Attribute verwendet, die optional sind, ist das Cmdlet-Attribut erforderlich. Weitere Informationen zu diesem Attribut finden Sie unter Cmdlet-Attributdeklaration.

Cmdlet-Parameter

Die öffentlichen Eigenschaften, die die Parameter definieren, die dem Benutzer oder der Anwendung zur Verfügung stehen, die das Cmdlet ausführt. Cmdlets können die Parameter "erforderlich", "benannt", "positional" und "" haben. Mit Switchparametern können Sie Parameter definieren, die nur ausgewertet werden, wenn die Parameter im Aufruf angegeben werden. Weitere Informationen zu den verschiedenen Parametertypen finden Sie unter Cmdlet Parameters.

Parametersatz

Eine Gruppe von Parametern, die im selben Befehl zum Ausführen einer bestimmten Aktion verwendet werden können. Ein Cmdlet kann mehrere Parametersätze aufweisen, aber jeder Parametersatz muss mindestens einen eindeutigen Parameter aufweisen. Ein guter Cmdlet-Entwurf schlägt dringend vor, dass der eindeutige Parameter auch ein erforderlicher Parameter ist. Weitere Informationen zu Parametersätzen finden Sie unter Cmdlet Parameter Sets.

Dynamischer Parameter

Ein Parameter, der dem Cmdlet zur Laufzeit hinzugefügt wird. In der Regel werden dem Cmdlet die dynamischen Parameter hinzugefügt, wenn ein anderer Parameter auf einen bestimmten Wert festgelegt ist. Weitere Informationen zu dynamischen Parametern finden Sie unter Cmdlet Dynamic Parameters.

Eingabeverarbeitungsmethoden

Die System.Management.Automation.Cmdlet Klasse stellt die folgenden virtuellen Methoden bereit, die zum Verarbeiten von Datensätzen verwendet werden. Alle abgeleiteten Cmdlet-Klassen müssen eine oder mehrere der ersten drei Methoden außer Kraft setzen:

Weitere Informationen zu diesen Methoden finden Sie unter Cmdlet Input Processing Methods.

Wenn Sie ein Cmdlet implementieren, müssen Sie mindestens eine dieser Eingabeverarbeitungsmethoden außer Kraft setzen. In der Regel ist die ProcessRecord() die Methode, die Sie außer Kraft setzen, da sie für jeden Datensatz aufgerufen wird, den das Cmdlet verarbeitet. Im Gegensatz dazu werden die BeginProcessing()-Methode und die EndProcessing() Methode einmal aufgerufen, um die Vorverarbeitung oder die Nachbearbeitung der Datensätze durchzuführen. Weitere Informationen zu diesen Methoden finden Sie unter Eingabeverarbeitungsmethoden.

ShouldProcess-Feature

PowerShell ermöglicht ihnen das Erstellen von Cmdlets, die den Benutzer zur Eingabe von Feedback auffordern, bevor das Cmdlet eine Änderung am System vorgibt. Um dieses Feature zu verwenden, muss das Cmdlet deklarieren, dass es das feature ShouldProcess unterstützt, wenn Sie das Cmdlet-Attribut deklarieren, und das Cmdlet muss die System.Management.Automation.Cmdlet.ShouldProcess und System.Management.Automation.Cmdlet.ShouldContinue Methoden innerhalb einer Eingabeverarbeitungsmethode aufrufen. Weitere Informationen zur Unterstützung der ShouldProcess-Funktionalität finden Sie unter Anfordern von Bestätigungs-.

Transaktion

Eine logische Gruppe von Befehlen, die als einzelne Aufgabe behandelt werden. Die Aufgabe schlägt automatisch fehl, wenn ein Befehl in der Gruppe fehlschlägt, und der Benutzer hat die Wahl, die in der Transaktion ausgeführten Aktionen anzunehmen oder abzulehnen. Um an einer Transaktion teilzunehmen, muss das Cmdlet deklarieren, dass es Transaktionen unterstützt, wenn das Cmdlet-Attribut deklariert wird. Unterstützung für Transaktionen wurde in Windows PowerShell 2.0 eingeführt. Weitere Informationen zu Transaktionen finden Sie unter How to Support Transactions.

Unterschiede zwischen Cmdlets und Befehlen

Cmdlets unterscheiden sich von Befehlen in anderen Befehlsshellumgebungen auf folgende Weise:

  • Cmdlets sind Instanzen von .NET-Klassen; sie sind keine eigenständigen ausführbaren Dateien.
  • Cmdlets können aus nur einem Dutzend Codezeilen erstellt werden.
  • Cmdlets führen in der Regel keine eigenen Analyse-, Fehlerpräsentations- oder Ausgabeformatierungen aus. Die Analyse, Fehlerpräsentation und Ausgabeformatierung werden von der PowerShell-Laufzeit behandelt.
  • Cmdlets verarbeiten Eingabeobjekte aus der Pipeline und nicht aus Textströmen, und Cmdlets liefern in der Regel Objekte als Ausgabe an die Pipeline.
  • Cmdlets sind datensatzorientiert, da sie jeweils ein einzelnes Objekt verarbeiten.

Cmdlet-Basisklassen

Windows PowerShell unterstützt Cmdlets, die von den folgenden beiden Basisklassen abgeleitet werden.

  • Die meisten Cmdlets basieren auf .NET-Klassen, die von der System.Management.Automation.Cmdlet Basisklasse abgeleitet sind. Die Ableitung von dieser Klasse ermöglicht es einem Cmdlet, die mindesten Abhängigkeiten von der Windows PowerShell-Laufzeit zu verwenden. Dies hat zwei Vorteile. Der erste Vorteil besteht darin, dass die Cmdlet-Objekte kleiner sind und sie weniger von Änderungen an der PowerShell-Laufzeit betroffen sind. Der zweite Vorteil besteht darin, dass Sie bei Bedarf direkt eine Instanz des Cmdlet-Objekts erstellen und dann direkt aufrufen können, anstatt sie über die PowerShell-Laufzeit aufzurufen.

  • Die komplexeren Cmdlets basieren auf .NET-Klassen, die von der System.Management.Automation.PSCmdlet Basisklasse abgeleitet sind. Die Ableitung von dieser Klasse bietet Ihnen viel mehr Zugriff auf die PowerShell-Laufzeit. Mit diesem Zugriff kann Ihr Cmdlet Skripts aufrufen, auf Anbieter zugreifen und auf den aktuellen Sitzungszustand zugreifen. (Um auf den aktuellen Sitzungszustand zuzugreifen, erhalten und legen Sie Sitzungsvariablen und -einstellungen fest.) Die Ableitung von dieser Klasse erhöht jedoch die Größe des Cmdlet-Objekts und bedeutet, dass Ihr Cmdlet enger mit der aktuellen Version der PowerShell-Laufzeit gekoppelt ist.

Im Allgemeinen sollten Sie, sofern Sie nicht den erweiterten Zugriff auf die PowerShell-Laufzeit benötigen, von der System.Management.Automation.Cmdlet Klasse abgeleitet werden. Die PowerShell-Laufzeit verfügt jedoch über umfangreiche Protokollierungsfunktionen für die Ausführung von Cmdlets. Wenn Ihr Überwachungsmodell von dieser Protokollierung abhängt, können Sie die Ausführung des Cmdlets innerhalb eines anderen Cmdlets verhindern, indem Sie von der System.Management.Automation.PSCmdlet Klasse abgeleitet werden.

Cmdlet-Attribute

PowerShell definiert mehrere .NET-Attribute, die zum Verwalten von Cmdlets verwendet werden, und um allgemeine Funktionen anzugeben, die von PowerShell bereitgestellt werden und die möglicherweise vom Cmdlet benötigt werden. Beispielsweise werden Attribute verwendet, um eine Klasse als Cmdlet festzulegen, die Parameter des Cmdlets anzugeben und die Überprüfung der Eingabe anzufordern, damit Cmdlet-Entwickler diese Funktionalität nicht in ihrem Cmdlet-Code implementieren müssen. Weitere Informationen zu Attributen finden Sie unter PowerShell-Attribute.

Cmdlet-Namen

PowerShell verwendet ein Verb-und-Nomen-Namenspaar zum Benennen von Cmdlets. Beispielsweise wird das in PowerShell enthaltene Get-Command Cmdlet verwendet, um alle Cmdlets abzurufen, die in der Befehlsshell registriert sind. Das Verb identifiziert die Aktion, die das Cmdlet ausführt, und das Substantiv identifiziert die Ressource, für die das Cmdlet seine Aktion ausführt.

Diese Namen werden angegeben, wenn die .NET-Klasse als Cmdlet deklariert wird. Weitere Informationen zum Deklarieren einer .NET-Klasse als Cmdlet finden Sie unter Cmdlet-Attributdeklaration.

Schreiben von Cmdlet-Code

Dieses Dokument bietet zwei Möglichkeiten, um zu ermitteln, wie Cmdlet-Code geschrieben wird. Wenn Sie den Code lieber ohne viele Erläuterungen anzeigen möchten, lesen Sie Beispiele für Cmdlet Code. Wenn Sie weitere Erläuterungen zum Code bevorzugen, lesen Sie die themen GetProc Tutorial, StopProc Tutorialoder SelectStr Tutorial Themen.

Weitere Informationen zu den Richtlinien zum Schreiben von Cmdlets finden Sie unter Cmdlet Development Guidelines.

Siehe auch

PowerShell-Cmdlet-Konzepte

Schreiben eines PowerShell-Cmdlets

PowerShell SDK-