Se você estiver chamando aplicativos nativos, não se preocupe com [Environment]::CurrentDirectory
o $PWD
diretório atual do PowerShell . Por vários motivos, o PowerShell não define o diretório de trabalho atual do processo quando você define o local ou o local do envio, portanto, certifique-se de fazê-lo se estiver executando aplicativos (ou cmdlets) que esperam que seja definido.
Em um script, você pode fazer isso:
$CWD = [Environment]::CurrentDirectory
Push-Location $MyInvocation.MyCommand.Path
[Environment]::CurrentDirectory = $PWD
## Your script code calling a native executable
Pop-Location
# Consider whether you really want to set it back:
# What if another runspace has set it in-between calls?
[Environment]::CurrentDirectory = $CWD
Não há alternativa infalível para isso. Muitos de nós colocamos uma linha em nossa função de prompt para definir [Environment] :: CurrentDirectory ... mas isso não ajuda quando você está alterando o local em um script.
Duas notas sobre o motivo pelo qual isso não é definido automaticamente pelo PowerShell:
- O PowerShell pode ser multiencadeado. Você pode ter vários Runspaces (consulte RunspacePool e o módulo PSThreadJob) sendo executados simultaneamente em um único processo. Cada espaço de execução possui seu próprio
$PWD
diretório de trabalho atual, mas há apenas um processo e apenas um Ambiente.
- Mesmo quando você é um thread único,
$PWD
nem sempre é um CurrentDirectory legal (você pode colocar um CD no provedor de registro, por exemplo).
Se você quiser colocá-lo em seu prompt (que seria executado apenas no espaço de execução principal, com um único encadeamento), será necessário usar:
[Environment]::CurrentDirectory = Get-Location -PSProvider FileSystem
ant
com alguns parâmetros. Então, eu tenho que ligarant
dessa pasta para garantir que ele encontre o arquivo de configuração corretamente. Idealmente, estou procurando algo para alterar temporariamente o diretório de execução localmente dentro desse script.