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