Execute o Script do PowerShell como administrador no mesmo diretório do script original

2

Portanto, aparentemente não há uma maneira fácil de executar diretamente um script .ps1 como administrador clicando duas vezes nele; você pode editar o registro para executá-lo, mas, a fim de fazê-lo funcionar como administrador, aparentemente você precisa dizer para ele abrir um novo PowerShell elevado dentro do PowerShell já em execução. Infelizmente, até onde eu pude ver, toda vez que isso é feito, o prompt elevado é aberto em um diretório diferente do script original! Então, por exemplo, se eu tiver o seguinte script:

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
  .\mylocalscript.ps1
  Write-Host "Just an example!"
}
else
{
  Start-Process -FilePath "powershell" -ArgumentList "-NoExit $('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Path)$('""')" -Verb runAs
}

Ele falha porque, ao ser aberto como administrador, o script local que já foi local para o script original não é mais local e não pode encontrá-lo. Essencialmente, preciso de uma maneira de informar à nova janela elevada do PowerShell que é aberta para alterar automaticamente de volta para o diretório do script original.

Qual é a melhor maneira de fazer isso?

    
por jippyjoe4 03.07.2018 / 19:20

1 resposta

2

Você pode usar conjunto de locais com -Path $PSScriptRoot para alterar para o diretório em que o script contém os Os comandos residem e, em seguida, você pode executar o restante de sua lógica após esse comando para garantir que ele seja definido de volta para o diretório necessário antes da execução de qualquer comando.

Set-Location -Path $PSScriptRoot

Mais recursos

  • Definir local
  • Variáveis automáticas

    • $PSScriptRoot

      Contains the directory from which the script module is being executed. This variable allows scripts to use the module path to access other resources. In PowerShell 3.0+ this is available everywhere, not just in modules.

por 03.07.2018 / 19:43