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