Viele Leute verwenden gerne PowerShell , weil sie damit Dinge tun können, die mit der Windows-GUI nicht möglich sind. Dennoch lässt sich nicht leugnen, dass einige PowerShell-Cmdlets etwas mühsam oder kompliziert sein können. Aber was wäre, wenn es eine Möglichkeit gäbe, diese Cmdlets zu bearbeiten und dafür zu sorgen, dass sie sich so „verhalten“, wie Sie es möchten? Ob Sie es glauben oder nicht, es gibt einen einfachen Weg, dies zu tun. Sie können das Verhalten des Cmdlets ändern, indem Sie die Werte der PowerShell-Standardparameter ändern. In diesem Artikel erfahren Sie, wie Sie die Standardparameter von PowerShell verwenden, um das Verhalten von Cmdlet-Befehlen zu ändern.
Warnung
Bevor Sie beginnen, müssen Sie einige Dinge beachten. Obwohl das Ändern der PowerShell-Standardparameter und des Cmdelt-Verhaltens praktisch ist, kann es zu Problemen führen. Wenn Sie ein Skript ausführen und dieses davon ausgeht, dass sich das geänderte Cmdlet auf eine bestimmte Weise verhält, erhalten Sie möglicherweise unvorhersehbare Ergebnisse. Daher sollten Sie darauf achten, die PowerShell-Standardparameter sorgfältig zu ändern.
Kurze Rezension
Es gibt zwei PowerShell-Konzepte, mit denen Sie vertraut sein müssen, um mit Standardparametern arbeiten zu können. Das erste Konzept ist variabel. In PowerShell beginnen Variablennamen immer mit einem Dollarzeichen, und Sie können den Inhalt einer Variablen schreiben, indem Sie den Variablennamen eingeben.
Das zweite Konzept, mit dem Sie vielleicht vertraut sind, ist die Hash-Tabelle. Eine Hash-Tabelle ist im Wesentlichen eine Liste, die aus Schlüssel/Wert-Paaren besteht. Angenommen, Sie möchten eine Hash-Tabelle erstellen, die die Namen der US-Bundesstaaten und deren Abkürzungen enthält. Unten ist der Code:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('South Carolina','SC')
$StateList.add('Georgia','GA')
$StateList
Die erste Codezeile erstellt eine leere Hash-Tabelle namens $StateList . Die nächsten drei Zeilen fügen der Tabelle Einträge hinzu. Jeder Eintrag besteht aus einem Schlüssel (Staatsname) und einem Wert (Staatskürzel). Die letzte Zeile listet den Inhalt der Tabelle auf. Im Bild unten können Sie den Code in Aktion sehen.
Dies ist nur ein sehr einfaches Beispiel und es gibt viele andere Möglichkeiten, Hash-Tabellen zu verwenden.
Arbeiten Sie mit PowerShell-Standardparametern
PowerShell verfügt über eine integrierte Variable zum Speichern von Standardparametern, die mit seinen Cmdlets verwendet werden. Diese Variable heißt $PSDefaultParameterValues . Wie Sie vielleicht anhand der ersten Einführung und des Namens der Variablen bemerkt haben, handelt es sich hierbei nicht um eine gewöhnliche Variable, sondern um eine Hash-Tabelle. Wenn Sie jedoch den Variablennamen in PowerShell eingeben, werden Sie schnell feststellen, dass die Tabelle leer ist, wie unten gezeigt.
Was können wir also mit dieser $PSDefaultParameterValues- Variable machen ? Wie oben erwähnt, können Sie das Verhalten von PowerShell-Cmdlets steuern. Der einzige Punkt ist, dass Sie die inhärenten Fähigkeiten des Cmdlet-Befehls nicht überwinden können. Schauen wir uns also ein Beispiel an.
Dieses Beispiel möchten Sie vielleicht nicht im wirklichen Leben verwenden, aber es zeigt Ihnen, wie einfach es ist, das Cmdlet-Verhalten radikal zu ändern. Wenn Sie das Cmdlet Get-TimeZone in PowerShell eingeben, wird der Name der Zeitzone angezeigt, für die Ihr PC derzeit konfiguriert ist. Sie können dieses Beispiel im Bild unten sehen.
Jetzt ändern wir dieses Cmdlet so, dass es nicht die Zeitzone anzeigt, für die das System konfiguriert ist, sondern die verfügbaren Zeitzonen. Dazu benötigen wir eine Cmdlet-Syntax mit dem Cmdlet Get-Help , gefolgt vom Cmdlet Get-TimeZone . Die Syntax des Cmdlets können Sie unten sehen.
Diese Syntax enthält einen Parameter namens ListAvailable . Geben Sie den folgenden Befehl ein:
$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)
Der erste Teil dieses Befehls teilt PowerShell lediglich mit, dass Sie der Hash-Tabelle einen Wert hinzufügen möchten, genau wie wir es im vorherigen Abschnitt mit dem Beispiel für die Abkürzung des US-Bundesstaates getan haben. Diese Hash-Tabelle enthält ein Schlüssel/Wert-Paar. In diesem Fall ist der Schlüssel der Cmdlet-Name (Get-TimeZone), gefolgt von einem Komma und dem Namen des Parameters, den Sie festlegen möchten. In diesem Fall lautet der Parametername ListAvailable. Der zweite Teil dieses Cmdlets ist der Wert, den Sie dem Parameter zuweisen möchten. Hier ist es $True . Der ListAvailable-Parameter benötigt normalerweise keinen Wert. Wenn Sie also „$True“ angeben , weisen Sie PowerShell an, diesen Parameter zu verwenden, ohne ihm einen Wert zuzuweisen.
Wenn Sie sich das Bild unten ansehen, sehen Sie, was passiert, wenn Sie das Cmdlet Get-TimeZone ausführen.
Dinge, die Sie beachten sollten
Das Wichtigste, was Sie verstehen müssen, ist, dass das Hinzufügen eines neuen Werts für einen PowerShell-Standardparameter dazu dient, das Standardverhalten des Cmdlets zu ändern, und nicht, dass die Funktionen des Cmdlets entfernt werden. Auch wenn Sie das Cmdlet „Get-TimeZone“ ändern, um verfügbare Zeitzonen anstelle der aktuellen Zeitzone anzuzeigen. Sie können weiterhin die aktuellen Zeitzoneninformationen anzeigen, wenn Sie mehr anzeigen.
Sie müssen außerdem wissen, dass benutzerdefinierte Standardparameter entfernt werden können. Um ein einzelnes Element zu entfernen, verwenden Sie den Befehl $PSDefaultParameterValues.Remove , gefolgt vom Namen des Elements, das Sie entfernen möchten. Zum Beispiel:
$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)
Stattdessen können Sie mit diesem Befehl den gesamten Inhalt der Hash-Tabelle löschen:
$PSDefaultParameterValues.Clear();
Beispiele für beide Techniken finden Sie unten:
Sie können die gesamte Hash-Tabelle oder einen einzelnen Eintrag löschen.
Das Standardverhalten eines Cmdlet-Befehls zu ändern, kommt nicht oft vor, aber wenn Sie es brauchen, wissen Sie bereits, wie Sie es ändern können.
Ich wünsche Ihnen viel Erfolg!
Mehr sehen: