TÓPICO
    about_Command_Precedence

DESCRIÇÃO RESUMIDA
    Descreve como o Windows PowerShell determina o comando a ser 
    executado.


DESCRIÇÃO LONGA

    Este tópico explica como o Windows PowerShell determina o comando 
    a ser executado, principalmente quando uma sessão contém mais de 
    um comando com o mesmo nome. Ele também explica como executar 
    comandos que não são executados por padrão e como evitar 
    conflitos de nomes de comando na sessão.



 PRECEDÊNCIA DE COMANDOS
    Quando uma sessão inclui comandos que têm o mesmo nome, o Windows 
    PowerShell usa as seguintes regras para decidir o comando a ser 
    executado.

    Essas regras se torna muito importante quando você adiciona 
    comandos a sua sessão de módulos, snap-ins e outras sessões.

    
    -- Se você especificar o caminho para um comando, o Windows 
       PowerShell executa o comando no local especificado pelo caminho. 

       Por exemplo, o comando a seguir executa o script FindDocs.ps1 
       no diretório C:\TechDocs:

           C:\TechDocs\FindDocs.ps1

       Como um recurso de segurança, o Windows PowerShell não executa 
       comandos executáveis (nativos), inclusive scripts do Windows 
       PowerShell, a menos que o comando esteja localizado em um 
       caminho listado na variável de ambiente Path ($env:path) ou que
       você especifique o caminho para o arquivo de script. 

       Para executar um script no diretório atual, especifique o 
       caminho completo ou digite um ponto (.) para representar o 
       diretório atual.

       Por exemplo, para executar o arquivo FindDocs.ps1 no diretório 
       atual, digite:

           .\FindDocs.ps1

        

    -- Se você não especificar um caminho, o Windows PowerShell usará 
       a seguinte ordem de precedência quando executar comandos:

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

        Portanto, se você digitar "ajuda", o Windows PowerShell 
        primeiro procurará um alias denominado "ajuda", depois uma 
        função denominada "Ajuda" e, por fim, um cmdlet denominado 
        "Ajuda". Ele executa o primeiro item de "ajuda" que encontra.

        Por exemplo, considere que você tenha uma função denominada Get-Map. 
        Então, você adiciona ou importa um cmdlet denominado Get-Map. Por  
        padrão, o Windows PowerShell executa a função quando você digita
        "Get-Map". 


    --	Quando a sessão contiver itens do mesmo tipo com o mesmo nome, 
      	como dois cmdlets com o mesmo nome, o Windows PowerShell 
      	executará o item que foi adicionado mais recentemente à sessão.

        Por exemplo, considere que você tenha um cmdlet denominado Get-Date. 
        Então, você importa outro cmdlet denominado Get-Date. Por padrão,
        o Windows PowerShell executa o cmdlet importado mais recentemente
        quando você digita "Get-Date".




 ITENS OCULTOS e SUBSTITUÍDOS
    Em consequência dessas regras, itens podem ser substituídos ou 
    ocultados por itens com o mesmo nome. 

        --  Itens são "ocultados" ou "sombreados" se você ainda puder 
            acessar o item original, como com a qualificação do nome 
            do item com um nome de módulo ou snap-in. 

            Por exemplo, se você importar uma função que tem o mesmo 
            nome de um cmdlet na sessão, o cmdlet será ocultado (mas 
            não substituído), porque foi importado de um snap-in ou módulo.
            

        --  Itens são "substituídos" ou "sobrescritos" quando você 
            não pode mais acessar o item original.

            Por exemplo, se você importar uma variável que tem o 
            mesmo nome de uma variável na sessão, a variável original 
            será substituída e não estará mais acessível. Você não 
            pode qualificar uma variável com um nome de módulo.
           
            Além disso, se você digitar uma função na linha de 
            comando e importar uma função com o mesmo nome, a função 
            original será substituída e não estará mais acessível.



 EXECUTANDO COMANDOS OCULTOS
    Você pode executar determinados comandos especificando 
    propriedades de item que distinguem o comando de outros comandos 
    que possam ter o mesmo nome. 

    Use esse método para executar qualquer comando, mas ele é 
    especialmente útil para executar comandos ocultos. 

    Use esse método como uma prática recomendada ao escrever scripts 
    que você pretende distribuir, porque você não pode prever quais 
    comandos estarão presentes na sessão em que o script é executado.


    NOMES QUALIFICADOS
        Você pode executar comandos que foram importados de um 
        snap-in ou módulo do Windows PowerShell, ou de outra sessão, 
        qualificando o nome do comando com o nome do módulo ou 
        snap-in no qual ele foi originado. 

        Você pode qualificar comandos, mas não pode qualificar 
        variáveis ou aliases.   

        Por exemplo, se o cmdlet Get-Date do snap-in Microsoft.PowerSh
        ell.Utility for ocultado por um alias, uma função ou um 
        cmdlet de mesmo nome, você poderá executá-lo usando o nome 
        qualificado de snap-in do cmdlet:

            Microsoft.PowerShell.Utility\Get-Date

        Para executar um comando New-Map que foi adicionado pelo 
        módulo MapFunctions, use seu nome qualificado de módulo:

            MapFunctions\New-Map


        Para localizar o snap-in ou módulo do qual um comando foi 
        importado, use o seguinte formato de comando Get-Command:

            get-command <nome-de-comando> | format-list -property 
            Name, PSSnapin, Module

        Por exemplo, para localizar a origem do cmdlet Get-Date, digite:

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

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

    OPERADOR DE CHAMADA
        Também é possível usar o operador de Chamada (&) para 
        executar qualquer comando que você possa obter usando um 
        comando Get-ChildItem (o alias é "dir"), Get-Command ou Get-Module. 

        Para executar um comando, coloque Get-Command entre 
        parênteses e use o operador de Chamada (&) para executar o 
        comando.

            &(get-command ...) 

        - ou -

            &(dir ... )

        Por exemplo, se você tiver uma função denominada Map ocultada 
        por um alias denominado Map, use o comando a seguir para 
        executar a função.

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

        - ou -

            &(dir function:\map)


        Você também pode salvar seu comando oculto em uma variável 
        para facilitar sua execução.

        Por exemplo, o seguinte comando salva a função Map na 
        variável $myMap e, em seguida, usa o operador de Chamada para 
        executá-la.

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

            &($myMap)


        Se um comando tiver origem em um módulo, você poderá usar o 
        seguinte formato para executá-lo:

           & <objeto-PSModuleInfo> <comando>

        Por exemplo, para executar o cmdlet Add-File no módulo 
        FileCommands, use a seguinte sequência de comandos:
           
           $FileCommands = get-module -name FileCommands 

           & $FileCommands Add-File
        
   

 ITENS SUBSTITUÍDOS
    Os itens que não foram importados de um módulo ou snap-in, como 
    funções, variáveis e aliases que você cria na sessão ou adiciona 
    usando um perfil, podem ser substituídos por comandos com o mesmo 
    nome. Se eles forem substituídos, você não poderá acessá-los.

    Variáveis e aliases são sempre substituídos, mesmo que tenham 
    sido importados de um módulo ou snap-in, porque você não pode 
    usar um operador de chamada ou um nome qualificado para executá-los.

    Por exemplo, se você digitar uma função Get-Map na sessão e 
    importar uma função chamada Get-Map, a função original será 
    substituída. Você não poderá recuperá-la na sessão atual.


   
 EVITANDO CONFLITOS DE NOMES
    O melhor modo de gerenciar conflitos de nome de comando é 
    impedi-los. Ao nomear seus comandos, use um nome que seja muito 
    específico ou que provavelmente seja exclusivo. Por exemplo, 
    adicione suas iniciais ou o acrônimo do nome de sua empresa aos 
    substantivos em seus comandos.

    Além disso, ao importar comandos para sua sessão de um módulo do 
    Windows PowerShell ou de outra sessão, use o parâmetro Prefix do cmdlet 
    Import-Module ou Import-PSSession para adicionar um prefixo aos 
    substantivos nos nomes de comandos.

    Por exemplo, o seguinte comando evita conflitos com os cmdlets 
    Get-Date e Set-Date que acompanham o Windows PowerShell quando 
    você importa o módulo DateFunctions.

        import-module -name DateFunctions -prefix ZZ

    Para obter mais informações, consulte 
    Import-Module e Import-PSSession. 


CONSULTE TAMBÉM
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias (provedor)
    Função (provedor)
    Get-Command
    Import-Module
    Import-PSSession




Sumário