TEMA
    about_Command_Precedence

DESCRIPCIÓN BREVE
    Describe cómo determina Windows PowerShell qué comando se ejecutará.


DESCRIPCIÓN DETALLADA

    En este tema se explica cómo determina Windows PowerShell qué 
    comando se va a ejecutar, sobre todo cuando una sesión contiene 
    más de un comando con el mismo nombre.
    También se explica cómo ejecutar los comandos que no se ejecutan 
    de forma predeterminada y cómo evitar los conflictos de nombres 
    de comandos en una sesión.



 PRECEDENCIA DE LOS COMANDOS
    Cuando una sesión incluye comandos que tienen el mismo nombre, 
    Windows PowerShell utiliza las reglas siguientes para decidir qué 
    comando se ejecutará.

    Estas reglas cobran mucha importancia si se agregan comandos a la 
    sesión desde módulos, complementos y otras sesiones.

    
    -- Si se especifica la ruta de acceso a un comando, Windows 
       PowerShell ejecuta el comando en la ubicación especificada por 
       la ruta de acceso. 

       Por ejemplo, el siguiente comando ejecuta el script 
       FindDocs.ps1 que se encuentra en el directorio C:\TechDocs:

           C:\TechDocs\FindDocs.ps1

       Como característica de seguridad, Windows PowerShell no 
       ejecuta comandos ejecutables (nativos), ni siquiera scripts de 
       Windows PowerShell, a menos que el comando se encuentre en una 
       ruta de acceso incluida en la lista en de la variable de 
       entorno Path ($env:path) o que se especifique la ruta de 
       acceso al archivo de script. 

       Para ejecutar un script que se encuentra en el directorio 
       actual, se escribe la ruta de acceso completa o bien se usa un 
       punto (.) para representar el directorio actual.

       Por ejemplo, para ejecutar el archivo FindDocs.ps1 en el 
       directorio actual, escriba:

           .\FindDocs.ps1

        

    -- Si no se especifica una ruta de acceso, Windows PowerShell 
       utiliza el orden de precedencia siguiente al ejecutar los comandos:

            1. Alias
            2. Function
            3. Cmdlet 
            4. Comandos nativos de Windows

        Por consiguiente, si escribe "help", Windows PowerShell busca en primer 
        lugar los alias que se denominan "help", a continuación, una función 
        denominada "Help" y, por último, un cmdlet denominado "Help".  
        Ejecuta el primer elemento "help" que encuentra.

        Por ejemplo, supongamos que existe una función denominada Get-Map. 
        A continuación, se agrega o importa un cmdlet denominado Get-Map. 
        De forma predeterminada, Windows PowerShell ejecutará dicha función al 
        escribir "Get-Map".
        


    --	Cuando la sesión contiene elementos del mismo tipo que tienen 
      	el mismo nombre, como dos cmdlets con el mismo nombre, Windows 
      	PowerShell ejecuta el elemento que se agregó a la sesión más 
      	recientemente.

                
        Por ejemplo, supongamos que tenemos un cmdlet denominado Get-Date. 
        A continuación, Windows PowerShell ejecutará el último cmdlet que se ha 
        importado, cuando se escribe "Get-Date".



 ELEMENTOS OCULTOS Y REEMPLAZADOS
    A causa de estas reglas, es posible que algunos elementos queden 
    ocultos o sean reemplazados por otros elementos con el mismo nombre. 

        --  Los elementos se "ocultan" o quedan "en la sombra" si 
            todavía puede tener acceso al elemento original, por 
            ejemplo, cualificando el nombre del elemento con el 
            nombre de un módulo o complemento. 

            Por ejemplo, si importa una función que tiene el mismo 
            nombre que un cmdlet de la sesión, el cmdlet se oculta 
            pero no se reemplaza, porque se ha importado desde un 
            complemento o módulo.
            

        --  Los elementos se "reemplazan" o "sobrescriben" si ya no 
            puede tener acceso al elemento original.

            Por ejemplo, si importa una variable que tiene el mismo 
            nombre que una variable de la sesión, se reemplaza la 
            variable original y deja de estar accesible. Una variable 
            no se puede cualificar con el nombre de un módulo.
           
            Además, si se escribe una función en la línea de comandos 
            y, a continuación, se importa una función con el mismo 
            nombre, se reemplaza la función original y deja de estar 
            accesible.



 EJECUTAR COMANDOS OCULTOS
    Es posible ejecutar comandos concretos especificando propiedades 
    de elemento que diferencian el comando de otros comandos que 
    podrían tener el mismo nombre. 

    Este método se puede utilizar para ejecutar cualquier comando, 
    pero resulta especialmente útil para ejecutar comandos ocultos. 

    Utilizar este método es un procedimiento recomendado cuando se 
    escribe script que se va a distribuir, puesto que no se puede 
    predecir qué comandos podrían estar presentes en la sesión donde 
    se ejecutará el script.


    NOMBRES COMPLETOS
        Es posible ejecutar comandos importados desde un complemento 
        o módulo de Windows PowerShell o de otra sesión, cualificando 
        el nombre del comando con el nombre del módulo o del 
        complemento donde se originó. 

        Los comandos se pueden cualificar, pero no las variables ni 
        los alias.   

        Por ejemplo, si un alias, una función o un cmdlet ocultan el 
        cmdlet Get-Date del complemento Microsoft.PowerShell.Utility 
        con el mismo nombre, se puede ejecutar mediante el nombre 
        completo del cmdlet que incluya el nombre del complemento:

            Microsoft.PowerShell.Utility\Get-Date

        Para ejecutar un comando New-Map agregado por el módulo 
        MapFunctions, se utiliza su nombre completo con el módulo:

            MapFunctions\New-Map


        Para buscar el complemento o el módulo desde el que se 
        importó un comando, se utiliza el formato del comando 
        Get-Command siguiente:

            get-command <nombre-del-comando> | format-list -property 
            Name, PSSnapin, Module

        Por ejemplo, para buscar el origen del cmdlet Get-Date, escriba:

            get-command get-date | format-list -property Name, 
            PSSnapin, Module

            Name     : Get-Date
            PSSnapIn : Microsoft.PowerShell.Utility 
            Module   :
       

    OPERADOR DE LLAMADA
        También puede utilizar el operador de llamada (&) para 
        ejecutar cualquier comando que se pueda obtener mediante un 
        comando Get-ChildItem (el alias es "dir"), Get-Command o Get-Module. 

        Para ejecutar un comando, se incluye el comando Get-Command entre 
        paréntesis y se utiliza el operador de llamada (&) para ejecutar el 
        comando.

            &(get-command ...) 

        - o bien,

            &(dir ... )

        Por ejemplo, si hay una función denominada Map que está 
        oculta por un alias denominado Map, se puede utilizar el 
        comando siguiente para ejecutar la función.

            &(get-command -name map -type function) 

        - o bien,

            &(dir function:\map)


        También se puede guardar el comando oculto en una variable 
        para facilitar su ejecución.

        Por ejemplo, el comando siguiente guarda la función Map en la 
        variable de $myMap y, a continuación, utiliza el operador de 
        llamada para ejecutarlo.

            $myMap = (get-command -name map -type function)

            &($myMap)


        Si un comando se origina en un módulo, se puede utilizar el 
        formato siguiente para ejecutarlo:

           & <objeto-PSModuleInfo> <comando>

        Por ejemplo, para ejecutar el cmdlet Add-File en el módulo 
        FileCommands, utilice el script siguiente:
           
           $FileCommands = get-module -name FileCommands 

           & $FileCommands Add-File
        
   

 ELEMENTOS REEMPLAZADOS
    Los elementos que no se han importado desde un módulo o 
    complemento, como las funciones, las variables y los alias que se 
    crean en la sesión, o que se agregan mediante un perfil, se 
    pueden reemplazar por los comandos que tienen el mismo nombre. Si 
    se reemplazan, no se puede tener acceso a ellos.

    Las variables y los alias siempre se reemplazan, aunque se hayan 
    importado desde un módulo o complemento, porque no es posible 
    utilizar un operador de llamada ni un nombre completo para ejecutarlos.

    Por ejemplo, si escribe una función Get-Map en la sesión y se 
    importa una función denominada Get-Map, la función original se 
    reemplaza y no se puede recuperar en la sesión actual.


   
 EVITAR CONFLICTOS DE NOMBRES
    La mejor manera de administrar los conflictos de nombres de 
    comandos es evitarlos. Al asignar nombres a los comandos, se 
    deben utilizar nombres que sean muy específicos o con una 
    probabilidad elevada de ser únicos. Por ejemplo, puede ser 
    conveniente agregar las iniciales del usuario o las siglas de la 
    empresa a los nombres que se utilicen en los comandos.

    Además, al importar los comandos a la sesión desde un módulo de Windows 
    PowerShell o desde otra sesión, se utiliza el parámetro Prefix del cmdlet 
    Import-Module o Import-PSSession para agregar un prefijo a los sustantivos 
    de los nombres de comandos.

    Por ejemplo, el comando siguiente evita cualquier conflicto con 
    los cmdlets Get-Date y Set-Date que se incluyen en Windows 
    PowerShell cuando se importa el módulo DateFunctions.

        import-module -name DateFunctions -prefix ZZ

    Para obtener más información, vea el tema de Ayuda correspondiente
     a los cmdlets Import-Module e Import-PSSession. 


VEA TAMBIÉN
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias (proveedor)
    Función (proveedor)
    Get-Command
    Import-Module
    Import-PSSession




Tabla de contenido