Freigeben über


about_Command_Precedence

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