Como obter a localização atual do script PowerShell
-
Usando o Cmdlet
Split-Path
para Obter a Localização Atual do Script PowerShell -
Usando a Variável
$PSScriptRoot
para Obter a Localização Atual do Script PowerShell - Obtendo o Diretório de Trabalho no Windows PowerShell para Obter a Localização Atual do Script PowerShell
- Conclusão

Neste guia abrangente, mergulhamos em vários métodos para determinar a localização atual de um script PowerShell, um aspecto fundamental que melhora a portabilidade e a confiabilidade do script. Cada método discutido atende a diferentes versões do PowerShell e cenários de script, garantindo ampla aplicabilidade.
Começamos com o cmdlet Split-Path
, uma abordagem versátil para versões anteriores do PowerShell, e então fazemos a transição para a conveniência do $PSScriptRoot
no PowerShell 3 e versões posteriores. Além disso, exploramos o robusto método $ExecutionContext
e o simples cmdlet Get-Location
, atendendo a ambientes e requisitos diversos.
Por fim, simplificamos o processo com o familiar alias pwd
, mostrando a adaptabilidade do PowerShell.
Usando o Cmdlet Split-Path
para Obter a Localização Atual do Script PowerShell
Antes do PowerShell 3, não havia uma maneira melhor de consultar a propriedade MyInvocation.MyCommand.Definition
usando o cmdlet Split-Path
.
O principal propósito de usar Split-Path
com $global:MyInvocation
é extrair o caminho do diretório do script PowerShell atualmente em execução. Isso é especialmente útil quando os scripts precisam interagir com outros arquivos ou diretórios na mesma localização que o script ou quando o comportamento do script depende de sua localização.
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
Write-Host "Current script location: $scriptDirectory"
Neste exemplo, usamos Split-Path
com o parâmetro -Parent
para isolar o componente do diretório do caminho completo do script em execução. Este caminho é obtido de $MyInvocation.MyCommand.Definition
.
O caminho do diretório resultante é armazenado na variável $scriptDirectory
.
Por fim, usamos Write-Host
para exibir esse caminho do diretório, proporcionando uma visão clara e imediata da localização atual do script. Este método não é apenas eficiente, mas também garante compatibilidade entre diferentes versões do PowerShell.
Saída:
Vale a pena notar que isso só funcionará se você incluir a sintaxe acima em um arquivo PowerShell salvo (.ps1
). Executar a sintaxe acima na linha de comando retornará uma exceção Null
.
Vale também notar que executar a sintaxe acima no Ambiente Integrado de Roteamento do PowerShell (ISE) como uma seleção (Executar como Seleção ou pressionando F8) acionará um ParameterArgumentValidationErrorNullNotAllowed
ou uma exceção Null.
Um remédio simples para corrigir o problema é chamar a variável $psISE
e obter a propriedade CurrentFile.FullPath
, e a partir daí, você pode obter a localização atual do script.
Usando a Variável $PSScriptRoot
para Obter a Localização Atual do Script PowerShell
Se você está executando a versão 3 ou posterior do PowerShell, uma variável automática foi introduzida para armazenar o diretório do arquivo ou módulo atual.
A variável $PSScriptRoot
contém o caminho do diretório do script sendo executado. Esta variável automática é incrivelmente útil para criar scripts portáteis onde codificar caminhos não é prático.
É especialmente útil quando seus scripts precisam carregar arquivos ou módulos que estão localizados no mesmo diretório que o próprio script.
Write-Host "The current script is located in: $PSScriptRoot"
Em nosso script, usamos o cmdlet Write-Host
para imprimir o valor de $PSScriptRoot
. Esta variável automaticamente contém o caminho completo para o diretório onde o script está localizado.
Ao invocar Write-Host
, garantimos que o caminho seja exibido no console do PowerShell. Esta abordagem é fácil e eficaz, tornando o script versátil para diversos ambientes e cenários.
Saída:
Obtendo o Diretório de Trabalho no Windows PowerShell para Obter a Localização Atual do Script PowerShell
Agora que discutimos como obter a localização atual do script, não faria mal aprender a obter o diretório de trabalho atual do nosso script.
No Windows PowerShell v2, a variável $ExecutionContext
contém a propriedade EngineIntrinsics
. Você pode usar essa variável e propriedade para encontrar os objetos de execução disponíveis para cmdlets, incluindo o diretório de trabalho atual do script PowerShell em execução.
$currentScriptLocation = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
Write-Host "Current script location: $currentScriptLocation"
Neste exemplo, utilizamos $ExecutionContext
para adquirir a localização do script atual. Ao chamar o método GetUnresolvedProviderPathFromPSPath
com o parâmetro '.\'
, pedimos efetivamente ao PowerShell para traduzir o diretório atual (representado por '.\'
) em um caminho completo.
O resultado é armazenado na variável $currentScriptLocation
, que depois exibimos usando Write-Host
. Este método é particularmente robusto, pois não depende de como o script está sendo executado e funciona em diferentes versões do PowerShell.
Saída:
No entanto, se você estiver executando a versão mais recente do Windows PowerShell, um cmdlet separado foi introduzido para facilitar as coisas. Podemos usar o cmdlet Get-Location
e chamar a propriedade Path
para obter o diretório de trabalho atual do script.
$currentDirectory = (Get-Location).Path
Write-Host "Current directory: $currentDirectory"
No código fornecido, primeiro usamos o cmdlet Get-Location
para recuperar o objeto de localização atual. Em seguida, acessamos sua propriedade Path
para obter o diretório atual como uma string, que armazenamos na variável $currentDirectory
.
Por fim, usamos Write-Host
para exibir essas informações. Este método é altamente eficaz para scripts que precisam conhecer seu contexto de execução em termos de localização de diretório.
Saída:
No PowerShell, pwd
é um alias para o cmdlet Get-Location
. O cmdlet Get-Location
recupera o diretório de trabalho atual da sessão do PowerShell, que é exatamente o que o comando tradicional pwd
(imprimir diretório de trabalho) faz em sistemas semelhantes ao Unix.
O PowerShell, com sua flexibilidade e compatibilidade em mente, fornece esses aliases para facilitar o uso de comandos semelhantes por usuários que estão familiarizados com outros ambientes de shell (como Unix ou Linux) no PowerShell.
$currentDirectory = pwd
Write-Host "Current directory: $currentDirectory"
Neste exemplo, usamos o comando pwd
para obter o objeto de localização atual, que é então armazenado na variável $currentDirectory
. Aproveitando Write-Host
, exibimos o caminho do diretório atual no console.
Este método é notavelmente simples e não requer nenhuma sintaxe complexa ou parâmetros adicionais. É uma maneira rápida e confiável de determinar o diretório de onde o script está sendo executado.
Saída:
Conclusão
Este artigo forneceu uma exploração abrangente de vários métodos para determinar a localização atual de um script PowerShell, cada um adaptado a diferentes versões do PowerShell e contextos de script. Desde o cmdlet Split-Path
adequado para versões anteriores até a variável automática $PSScriptRoot
em versões posteriores, o guia garante relevância para uma ampla gama de usuários do PowerShell.
Além disso, o uso de $ExecutionContext
e o cmdlet Get-Location
oferecem alternativas robustas e diretas, respectivamente, enquanto o alias pwd
apresenta uma opção familiar para usuários de diferentes origens de script. Este guia abrangente não apenas melhora a portabilidade e a confiabilidade dos scripts, mas também sublinha a natureza versátil do PowerShell.
Armados com essas técnicas, roteiristas e administradores de sistema estão melhor equipados para lidar com dependências de caminhos de arquivo, tornando seus scripts mais adaptáveis e eficazes em vários ambientes. Em última análise, entender esses métodos é fundamental para dominar a scriptagem em PowerShell e otimizar a funcionalidade dos scripts em diferentes plataformas e cenários.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn