THEMA about_Command_Precedence KURZBESCHREIBUNG Beschreibt, auf welche Weise von Windows PowerShell der auszuführende Befehl bestimmt wird. DETAILBESCHREIBUNG In diesem Thema wird erläutert, auf welche Weise von Windows PowerShell der auszuführende Befehl bestimmt wird, insbesondere in Fällen, in denen eine Sitzung mehrere Befehle mit demselben Namen enthält. Außerdem wird erklärt, wie Befehle ausgeführt werden, die nicht standardmäßig ausgeführt werden, und wie in Sitzungen Konflikte zwischen Befehlsnamen vermieden werden können. RANGFOLGE VON BEFEHLEN Wenn eine Sitzung Befehle enthält, die denselben Namen aufweisen, entscheidet Windows PowerShell anhand der folgenden Regeln, welcher Befehl ausgeführt werden soll. Diese Regeln sind besonders wichtig, wenn der Sitzung Befehle aus Modulen, Snap-Ins und anderen Sitzungen hinzugefügt werden. -- Wenn Sie den Pfad zu einem Befehl angeben, wird der Befehl von Windows PowerShell in dem Verzeichnis ausgeführt, das im Pfad angegeben ist. Mit dem folgenden Befehl wird beispielsweise das Skript "FindDocs.ps1" im Verzeichnis "C:\TechDocs" ausgeführt: C:\TechDocs\FindDocs.ps1 Aus Sicherheitsgründen werden von Windows PowerShell keine (systemeigenen) Befehle für ausführbare Dateien ausgeführt (einschließlich von Windows PowerShell-Skripts), es sei denn, der Befehl befindet sich unter einem Pfad, der in der Path-Umgebungsvariablen ("$env:path") aufgelistet ist, oder der Pfad zur Skriptdatei wird angegeben. Um ein Skript im aktuellen Verzeichnis auszuführen, geben Sie den vollständigen Pfad an, oder geben Sie einen Punkt (.) ein, um das aktuelle Verzeichnis darzustellen. Geben Sie beispielsweise Folgendes ein, wenn die Datei "FindDocs.ps1" im aktuellen Verzeichnis ausgeführt werden soll: .\FindDocs.ps1 -- Wenn kein Pfad angegeben ist, wird von Windows PowerShell beim Ausführen von Befehlen die folgende Rangfolge angewendet: 1. Alias 2. Funktion 3. Cmdlet 4. Systemeigene Windows-Befehle Wenn Sie also "help" eingeben, wird von Windows PowerShell zunächst nach dem Alias "Help" gesucht, anschließend nach der Funktion "Help" und schließlich nach dem Cmdlet "Help". Das erste gefundene "help"-Element wird ausgeführt. Angenommen, Sie verfügen über die Funktion "Get-Map", und Sie fügen ein Cmdlet mit dem Namen "Get-Map" hinzu oder importie- ren dieses Cmdlet. Wenn Sie dann "Get-Map" eingeben, wird von Windows PowerShell standardmäßig die Funktion ausgeführt. -- Wenn die Sitzung Elemente desselben Typs mit identischen Namen enthält (z. B. zwei Cmdlets mit demselben Namen), wird von Windows PowerShell das Element ausgeführt, das der Sitzung zuletzt hinzugefügt wurde. Angenommen, Sie verfügen über das Cmdlet "Get-Date" und importieren ein weiteres Cmdlet mit dem Namen "Get-Date". Wenn Sie dann "Get-Date" eingeben, wird von Windows PowerShell standardmäßig das zuletzt importierte Cmdlet ausgeführt. AUSGEBLENDETE UND ERSETZTE ELEMENTE Entsprechend diesen Regeln können Elemente durch Elemente mit demselben Namen ersetzt oder ausgeblendet werden. -- Elemente sind ausgeblendet bzw. für sie wurde ein "Shadowing" durchgeführt, wenn Sie immer noch über Zugriff auf das ursprüngliche Element verfügen, beispielsweise indem Sie den Elementnamen durch einen Modul- oder Snap-In-Namen qualifizieren. Wenn Sie z. B. eine Funktion importieren, die denselben Namen wie ein Cmdlet in der Sitzung aufweist, wird das Cmdlet ausgeblendet (jedoch nicht ersetzt), da es aus einem Snap-In bzw. aus einem Modul importiert wurde. -- Elemente wurden "ersetzt" oder "überschrieben", wenn Sie nicht mehr auf das ursprüngliche Element zugreifen können. Wenn Sie beispielsweise eine Variable importieren, die denselben Namen wie eine Variable in der Sitzung aufweist, wird die ursprüngliche Variable ersetzt, und der Zugriff auf diese Variable ist nicht mehr möglich. Eine Variable kann nicht mit einem Modulnamen qualifiziert werden. Wenn Sie in der Befehlszeile eine Funktion eingeben und anschließend eine Funktion mit demselben Namen importieren, wird die ursprüngliche Funktion ebenfalls ersetzt, und der Zugriff auf diese Funktion ist nicht mehr möglich. AUSFÜHREN VON AUSGEBLENDETEN BEFEHLEN Sie können bestimmte Befehle ausführen, indem Sie Elementeigen- schaften angeben, durch die der Befehl von anderen Befehlen unterschieden wird, die u. U. denselben Namen aufweisen. Mithilfe dieser Methode können Sie beliebige Befehle ausführen, sie empfiehlt sich jedoch insbesondere für die Ausführung ausgeblendeter Befehle. Diese Methode gilt als empfohlene Vorgehensweise für das Schreiben von Skripts, die verteilt werden sollen, da Sie nicht vorhersehen können, welche Befehle in der Sitzung eingegeben werden, in der das betreffende Skript ausgeführt wird. QUALIFIZIERTE NAMEN Sie können Befehle ausführen, die aus einem Windows PowerShell-Snap-In oder -Modul bzw. aus einer anderen Sitzung importiert wurden, indem Sie den Befehlsnamen mit dem Namen des Moduls oder des Snap-Ins qualifizieren, aus dem der Befehl importiert wurde. Im Unterschied zu Befehlen können Variablen und Aliase nicht qualifiziert werden. Wenn beispielsweise das Cmdlet "Get-Date" im Snap-In Microsoft.PowerShell.Utility durch einen Alias, eine Funktion oder ein Cmdlet mit demselben Namen ausgeblendet wird, können Sie es mit dem Snap-In-qualifizierten Namen des Cmdlets ausführen: Microsoft.PowerShell.Utility\Get-Date Um den Befehl "New-Map" auszuführen, der durch das MapFunctions-Modul hinzugefügt wurde, verwenden Sie dessen modulqualifizierten Namen: MapFunctions\New-Map Geben Sie den Befehl "Get-Command" im folgenden Befehlsformat an, um das Snap-In oder das Modul zu bestimmen, aus dem ein Befehl importiert wurde: get-command <Befehlsname> | format-list -property Name, PSSnapin, Module Geben Sie beispielsweise zum Bestimmen der Quelle des Cmdlets "Get-Date" folgenden Befehl ein: get-command get-date | format-list -property Name, PSSnapin, Module Name : Get-Date PSSnapIn : Microsoft.PowerShell.Utility Module : AUFRUFOPERATOR Mithilfe des Aufrufoperators (&) können Sie beliebige Befehle ausführen, die mit den Befehlen "Get-ChildItem" (der Alias lautet "dir"), "Get-Command" oder "Get-Module" abgerufen werden können. Schließen Sie zum Ausführen eines Befehls den Befehl "Get-Command" in Klammern ein, und führen Sie den Befehl mithilfe des Aufrufoperators (&) aus. &(get-command ...) - oder - &(dir ... ) Wenn Sie z. B. über die Map-Funktion verfügen, die durch einen Alias mit dem Namen "Map" ausgeblendet wird, führen Sie die Funktion mit dem folgenden Befehl aus. &(get-command -name map -type function) - oder - &(dir function:\map) Sie können den ausgeblendeten Befehl auch in einer Variablen speichern, um seine Ausführung zu erleichtern. Im folgenden Beispiel wird die Map-Funktion in der Variablen "$myMap" gespeichert. Anschließend wird die Funktion mit dem Aufrufoperator ausgeführt. $myMap = (get-command -name map -type function) &($myMap) Wenn ein Befehl aus einem Modul stammt, können Sie ihn mit dem folgenden Format ausführen. & <PSModuleInfo-Objekt> <Befehl> Geben Sie z. B. die folgende Befehlssequenz an, um das Cmdlet "Add-File" im FileCommands-Modul auszuführen. $FileCommands = get-module -name FileCommands & $FileCommands Add-File ERSETZTE ELEMENTE Elemente, die nicht aus Modulen oder Snap-Ins importiert wurden, z. B. in der Sitzung erstellte bzw. aus einem Profil hinzugefügte Funktionen, Variablen und Aliase, können durch Befehle mit demselben Namen ersetzt werden. Der Zugriff auf ersetzte Elemente ist nicht möglich. Variablen und Aliase werden immer ersetzt, auch wenn sie aus einem Modul oder einem Snap-In importiert wurden, da sie nicht mit einem Aufrufoperator oder einem qualifizierten Namen ausgeführt werden können. Wenn Sie z. B. in einer Sitzung eine Get-Map-Funktion eingeben und eine Funktion mit dem Namen "Get-Map" importieren, wird die ursprüngliche Funktion ersetzt. Sie kann dann in der laufenden Sitzung nicht abgerufen werden. VERMEIDEN VON NAMENSKONFLIKTEN Die beste Verwaltung von Konflikten zwischen Befehlsnamen besteht darin, solche Konflikte vorab zu verhindern. Wenn Sie die Befehle benennen, geben Sie einen spezifischen Namen an, der mit hoher Wahrscheinlichkeit eindeutig ist. Fügen Sie beispielsweise den Substantiven in den Befehlen Ihre Initialen oder das Kürzel Ihres Unternehmens hinzu. Wenn Sie in einer Sitzung Befehle aus einem Windows PowerShell-Modul oder aus einer anderen Sitzung importieren, fügen Sie den Substantiven in den Befehlsnamen mit dem Prefix-Parameter von "Import-Module" oder von "Import-PSSession" ein Präfix hinzu. Durch den folgenden Befehl werden z. B. Konflikte mit dem Cmdlet "Get-Date" und dem Cmdlet "Set-Date" vermieden, die in Windows PowerShell beim Importieren des DateFunctions-Moduls auftreten. import-module -name DateFunctions -prefix ZZ Weitere Informationen finden Sie unter Import-Module und Import-PSSession. SIEHE AUCH about_Path_Syntax about_Aliases about_Functions Alias (Anbieter) Funktion (Anbieter) Get-Command Import-Module Import-PSSession