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