cmdlet
Ein cmdlet – ausgesprochen Command-let – ist ein kleiner, einfacher Befehl, der in der Windows PowerShell-Umgebung verwendet wird. Ein cmdlet bildet normalerweise ein kleines Skript, das eine einzelne spezifische Funktion ausführen soll, zum Beispiel das Kopieren von Dateien und das Ändern von Verzeichnissen. Ein cmdlet und seine relevanten Parameter können zur sofortigen Ausführung in eine PowerShell-Befehlszeile eingegeben oder in ein längeres PowerShell-Skript eingebunden werden, das Anwender beliebig ausführen und miteinander teilen können.
Wie funktionieren cmdlets?
cmdlets verwenden ein Benennungsmuster für Verben und Substantive, mit dem sich jedes cmdlet leichter merken und lesen lässt. Als Beispiel verwendet ein typischer Get-ChildItem-Befehl das Verb Get gefolgt vom Nomen ChildItem. Bei Ausführung über die PowerShell-Laufzeitumgebung listet der Befehl die Elemente an einem oder mehreren angegebenen Speicherorten auf oder gibt sie zurück. Wenn sich Elemente in einem Container befinden, ruft der Befehl die Elemente im Container ab – die sogenannten ChildItems.
cmdlets basieren auf .NET-Klassen und basieren auf der Verwendung von .NET-Objekten. Somit können cmdlets Objekte als Eingabe empfangen und als Ausgabe bereitstellen, die dann wiederum als Eingabe dienen können, sodass cmdlets eine Befehlspipeline bilden können.
Die meisten cmdlets unterstützen Parameter als Teil des Eingabemechanismus. Benutzer fügen dem cmdlet Parameter über die Befehlszeile (Command Line Interface, CLI) hinzu oder sie werden als Ausgabe eines vorherigen cmdlets über die Pipeline an weitere cmdlets übergeben. Die Argumente oder Werte jedes Parameters beschreiben die tatsächliche Eingabe, die das cmdlet akzeptiert, wie das cmdlet funktionieren soll und welche Daten – falls vorhanden – das cmdlet ausgibt. Switches sind spezielle Argumente, die voreingestellte Optionen oder Auswahlmöglichkeiten bieten.
Betrachten Sie ein einfaches cmdlet wie Get-Help; Die Syntax des cmdlets, das Hilfe zu einem bestimmten cmdlet aus einer Online-Bibliothek zieht, lautet:
get-help <cmdlet-name> -online
Get-Help ist das cmdlet. Das Argument des Parameters <cmdlet-name> ist ein Platzhalter für das cmdlet, zu dem Sie weitere Informationen anfordern. Es kann ein beliebiges cmdlet sein. Der Switch ist -online; dadurch weisen Sie PowerShell dazu an, auf Hilfe für das gewünschte cmdlet aus der Online-Bibliothek von Microsoft zu verweisen und diese zurückzugeben. Um zum Beispiel Hile zum cmdlet Add-AppxPackage zu erhalten, würde der PowerShell-Befehl wie folgt aussehen:
get-help add-appxpackage -online
Um die statt aus der Online-Bibliothekt lokale Hilfe für dasselbe cmdlet zu verwenden, entfernen Sie den Schalter:
get-help add-appxpackage
cmdlets versus Funktionen
Obwohl PowerShell auf das Nutzen von cmdlets angewiesen ist, gibt es einen zweiten Befehlstyp namens Funktion. Funktionen werden auch über PowerShell interpretiert und routinemäßig in Skripten verwendet. cmdlets und Funktionen sind leicht zu verwechseln. Sie unterscheiden sich jedoch in mehreren wichtigen Punkten.
cmdlets sind .NET-Klassen, die in höheren Programmiersprachen wie C# geschrieben und in DLL-Dateien (Dynamic Link Library) kompiliert wurden, damit PowerShell darauf zugreifen kann. So können Sie cmdlet-Sets einfach hinzufügen und neue cmdlets schreiben und in PowerShell nutzen. Im Vergleich dazu sind Funktionen eher in PowerShell integriert und werden nicht kompiliert, sondern direkt in der PowerShell-Sprache geschrieben. Funktionen sind in der Regel längere und komplexere Entitäten, die normalerweise Parsen, Fehlerdarstellung und Ausgabeformatierung beherrschen; cmdlets sind oft zu klein und zu einfach, um solche Details zu verarbeiten.
Der wesentliche Unterschied zwischen cmdlets und Funktionen liegt jedoch im Packaging, einschließlich Einrichtung, Installation und Funktionen. In der Praxis gibt es kaum merkliche Unterschiede zwischen cmdlets und Funktionen. Wie cmdlets können Funktionen Parameter und Rückgabewerte haben, die angezeigt oder Variablen zugewiesen werden können.
Beliebte cmdlets
In der heutigen PowerShell sind standardmäßig Hunderte von cmdlets verfügbar, und Hunderte weitere cmdlets können zu PowerShell hinzugefügt werden, um erweiterte Anwendungen wie Virtualisierungsplattformen und Systemverwaltungstools zu unterstützen. Geben Sie Folgendes ein, um einen vollständigen Index aller cmdlets zu finden, die derzeit in PowerShell auf einem Computer verfügbar sind:
get-command -commandtype cmdlet
Sie erhalten eine vollständige Liste der cmdlets, die sich derzeit in PowerShell befinden. Es fehlen jedoch spezifische Details zum Zweck oder zur Syntax der einzelnen cmdlets. Verwenden Sie das cmdlet Get-Help wie oben beschrieben, um weitere Informationen zu bestimmten cmdlets zu erhalten.
PowerShell-Benutzer profitieren oft, indem sie sich mit einer Auswahl häufig verwendeter PowerShell-cmdlets vertraut machen, darunter:
Get-Location |
Findet das aktuelle Verzeichnis |
Get-ChildItem |
Listet Objekte im Verzeichnis |
Get-Help |
Zeigt Informationen zu einem cmdlet an |
Stop-Process |
Beendet einen PowerShell-Prozess |
Set-Location |
Ändert das aktuelle Verzeichnis |
Copy-Item |
Kopiert Dateien |
Remove-Item |
Entfernt eine Datei aus dem Verzeichnis |
Move-Item |
Bewegt eine Datei |
Rename-Item |
Benennt eine Datei um |
New-Item |
Erstellt ein neues Objekt oder Verzeichnis |
Invoke-GPUpdate |
Erzwingt eine Aktualisierung von Gruppenrichtlinien |
Stop-Computer |
Beendet einen lokalen oder Romote-Computer |
Restart-Computer |
Startet einen lokalen oder Remote-Computer neu |
Add-Computer |
Fügt einen Computer zu einer Domäne hinzu |
So schreiben Sie ein einfaches cmdlet
cmdlets sind in der Regel einfache Entitäten und können in nur mehreren Dutzend Zeilen C# oder anderer Sprachen geschrieben werden, die .NET-Objektcode unterstützen. Natürlich hängt der Prozess zum Verfassen eines cmdlets erheblich davon ab, welche Funktion es erfüllen soll und welche Sprache Sie nutzen. Er lässt sich dennoch grob in fünf Schritte unterteilen, die das Definieren des cmdlets, das Akzeptieren von Parametern und das anschließende Verarbeiten der Parameter zur Bereitstellung einer Ausgabe umfassen. Wir erläutern dies anhand eines Beispiel-cmdlets, das den Namen einer Person erfasst und eine Grußnachricht schreibt
- Wir erinnern uns: ein cmdlet ist ein Objekt. Daher erstellen wir auch ein solches. Geben Sie zuerst die übergeordnete Klasse für das cmdlet an. Ein cmdlet wird entweder von den Klassen System.Management.Automation.cmdlet oder System.Management.Automation.PScmdlet abgeleitet. In C# sieht das beispielsweise so aus:
using System.Management.Automation;
- Geben Sie als Nächstes den Namen der Objektklasse an. Wenn das neue cmdlet einfach eine Testnachricht senden soll, können wir in C# den Namespace-Befehl verwenden, also:
namespace SendTestNachricht
- Deklarieren Sie die Klasse des Objekts als cmdlet. Mit dem cmdlet-Attribut können Entwickler die Verb- und Nomenelemente des cmdlet-Namens festlegen. Ein C#-Befehl, der ein cmdlet definiert und es Testnachricht nennt, sieht so aus:
[cmdlet(VerbsCommunications.Send, "TestNachricht")]
- Geben Sie alle Parameter für das cmdlet mit dem Parameterattribut an. Die Länge und Komplexität dieses Codeabschnitts hängt von der Anzahl und den Typen der Parameter ab, die das cmdlet verarbeiten soll. Wenn das cmdlet beispielsweise lediglich den Namen einer Person aufnimmt, um eine Testnachricht zu verfassen, ist der Parameter die Eingabe des Namens und das Erstellen der Variablenzeichenfolge Name. In C# kann die Codesequenz wie folgt aussehen:
[Parameter(Mandatory=true)]
public string Name
{
get { return Name; }
set { name = value; }
}
private string name;
- Nachdem das cmdlet definiert und die Parameter akzeptiert wurden, kann der cmdlet seine Aufgabe erfüllen. Diese besteht in unserem Beispiel darin, den Parameter Name zu nehmen und diesen Namen in eine einfache Testnachricht auszugeben. Als Beispiel kann der WriteObject-Befehl eine einfache Ausgabe erzeugen wie:
{
WriteObject("Schoen Dich zu sehen " + name + "!");
}
Denken Sie daran, dass dies nur ein einfaches Beispiel ist und nicht alle Befehle, Satzzeichen – Einrückungen und Klammern – und unterstützenden Code enthält, die möglicherweise erforderlich sind, um ein solches cmdlet erfolgreich abzuschließen. Entwickler können in der C#- und PowerShell-Dokumentation, ausführliche Texte zur cmdlet-Erstellung und unzählige Beispiele für cmdlets für weitere Programmieranleitungen finden.