Como obter a localização atual do script PowerShell

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

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:

obter a localização atual do script do powershell - saída 1

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:

obter a localização atual do script do powershell - saída 2

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:

obter a localização atual do script do powershell - saída 3

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:

obter a localização atual do script do powershell - saída 4

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:

obter a localização atual do script do powershell - saída 5

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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn