about_Command_Precedence

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0

Insira a introdução aqui.

TÓPICO

about_Command_Precedence

DESCRIÇÃO BREVE

Descreve como o Windows PowerShell® determina qual comando deve ser executado.

DESCRIÇÃO LONGA

Este tópico explica como o Windows PowerShell determina o comando a ser executado, especialmente 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 explica como evitar conflitos de nome do comando na sessão.

PRECEDÊNCIA DE COMANDO

Quando uma sessão inclui comandos que têm o mesmo nome, o Windows PowerShell usa as seguintes regras para decidir qual comando deve ser executado.

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

-- 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), incluindo scripts do Windows PowerShell, a menos que o comando esteja localizado em um caminho que é listado na variável de ambiente Path ($env:path) ou a menos que você especifique o caminho para o arquivo de script.

Para executar um script que está 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 usa a seguinte ordem de precedência quando ele executa comandos:

              1. Alias
              2. Function
              3. Cmdlet 
              4. Native Windows commands

Portanto, se você digitar "Ajuda", o Windows PowerShell primeiro procura por um alias chamado "Ajuda", uma função nomeada "Ajuda", e finalmente, um cmdlet chamado "Ajuda". Ele executa o primeiro item "Ajuda" que encontrar.

Por exemplo, se você tiver uma função Get-Map na sessão e importar um cmdlet chamado Get-Map. Por padrão, quando você digita "Get-Map", o Windows PowerShell executa a função Get-Map.

-- Quando a sessão contém itens do mesmo tipo que têm o mesmo nome, como dois cmdlets com o mesmo nome, o Windows PowerShell executa o item que foi adicionado à sessão mais recentemente.

Por exemplo, se você tiver um cmdlet chamado Get-Date e importar outro cmdlet chamado Get-Date, por padrão, o Windows PowerShell executa o cmdlet que foi recentemente importado quando você digitar "Get-Date".

ITENS OCULTOS e SUBSTITUÍDOS

Como resultado dessas regras, os itens podem ser substituídos ou ocultos por itens com o mesmo nome.

-- Itens são "ocultos" ou "sombreados" se você ainda puder acessar o item original, como ao qualificar o nome do item com um módulo ou nome do snap-in.

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

-- Itens são "substituídos" ou "sobrescritos" se você não puder acessar o item original.

Por exemplo, se você importar uma variável que tem o mesmo nome que uma variável na sessão, a variável original é substituída e não é 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, em seguida, importar uma função com o mesmo nome, a função original é substituída e não é mais acessível.

LOCALIZANDO COMANDOS OCULTOS

O parâmetro All do cmdlet Get-Command obtém todos os comandos com o nome especificado, mesmo se eles estiverem ocultos ou tiverem sido substituídos. A partir do Windows PowerShell 3.0, por padrão, o Get-Command obtém apenas aqueles comandos que são executados quando você digita o nome do comando.

Nos exemplos a seguir, a sessão inclui uma função Get-Date e um cmdlet Get-Date.

O comando a seguir obtém o comando Get-Date que é executado quando você digita "Get-Date".

          PS C:\> Get-Command Get-Date

          CommandType     Name                                               ModuleName
          -----------     ----                                               ----------
          Function        get-date

O comando a seguir usa o parâmetro All para obter todos os comandos Get-Date.

          PS C:\> Get-Command Get-Date -All

          CommandType     Name                                               ModuleName
          -----------     ----                                               ----------
          Function        get-date
          Cmdlet          Get-Date                                           Microsoft.PowerShell.Utility

EXECUTANDO COMANDOS OCULTOS

Você pode executar comandos específicos ao especificar propriedades de item que distinguem o comando de outros comandos que possam ter o mesmo nome.

Você pode usar esse método para executar qualquer comando, mas ele é especialmente útil para a execução de comandos ocultos.

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

NOMES QUALIFICADOS

Você pode executar comandos que foram importados de um snap-in do Windows PowerShell ou módulo ou de outra sessão ao qualificar o nome de comando com o nome do módulo ou do 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.PowerShell.Utility estiver oculto por um alias, função ou cmdlet com o mesmo nome, você pode executá-lo usando o nome do snap-in qualificado 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 o módulo do qual um comando foi importado, use a propriedade ModuleName de comandos.

          (Get-Command <command-name>).ModuleName

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

          PS C:\>(Get-Command Get-Date).ModuleName
          Microsoft.PowerShell.Utility

OPERADOR DE CHAMADA

Você também pode usar o operador de chamada (&) para executar qualquer comando que você pode obter usando um comando Get-ChildItem (o alias é "dir"), Get-Command ou Get-Module.

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

          &(Get-Command ...)  

      - or -

          &(dir ... )

Por exemplo, se você tiver uma função chamada Mapa que fica oculta por um alias chamado Mapa, use o seguinte comando para executar a função.

          &(Get-Command -Name Map -Type function)  

      - or -

          &(dir function:\map)

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

Por exemplo, o comando a seguir salva a função Mapa 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 foi originado em um módulo, você pode usar o seguinte formato para executá-lo.

         & <PSModuleInfo-object> <command>

Por exemplo, para executar o cmdlet Add-File no módulo FileCommands, use a seguinte sequência de comando.

         $FileCommands = get-module -name FileCommands
           
         & $FileCommands Add-File

ITENS SUBSTITUÍDOS

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

Variáveis e aliases sempre são substituídos, mesmo que eles tenham sido importados de um módulo ou snap-in, pois 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 em sua sessão e importar uma função chamada Get-Map, a função original será substituída. Você não pode recuperá-la na sessão atual.

EVITANDO CONFLITOS DE NOME

A melhor maneira de gerenciar conflitos de nome do comando é impedi-los. Ao nomear seus comandos, use um nome que é muito específico ou que provavelmente seja exclusivo. Por exemplo, adicione suas iniciais ou o acrônimo do nome da empresa aos nomes em seus comandos.

Além disso, quando você importa comandos em 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 nomes nos nomes de comandos.

Por exemplo, o comando a seguir evita qualquer conflito com os cmdlets Get-Date e Set-Date que vêm com 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