Carregar o explorador do powershell com privilégios baixos

2

Eu tenho um script de manutenção do Powershell que funciona assim:

kill explorer
do things
restart explorer

Este script é executado no modo elevado, mas eu precisaria reiniciar o Explorer sem privilégios de administrador. Alguma idéia?

Obrigado

    
por rlbisbe 26.09.2012 / 10:36

2 respostas

6

Até onde eu sei, não é possível lançar diretamente um processo não elevado (ou seja, com um token padrão de baixo privilégio) de um processo elevado. Este não é um limite do PowerShell, é como o UAC no Windows funciona.

Do link :

A frequently asked question is how to launch an un-elevated application from an elevated process, or more fundamentally, how to I launch a process using my un-elevated token once I’m running elevated. Since there is no direct way to do this, the situation can usually be avoided by launching the original application as standard user and only elevating those portions of the application that require administrative rights. This way there is always a non-elevated process that can be used to launch additional applications as the currently logged on desktop user. Sometimes, however, an elevated process needs to get another application running un-elevated. This can be accomplished by using the task scheduler within Windows Vista®. The elevated process can register a task to run as the currently logged on desktop user.

Esse artigo menciona duas possíveis soluções:

  1. Execute o máximo possível do seu script no modo não elevado e apenas eleve para as partes que precisam dele. Em outras palavras, mate e reinicie o explorador no script não elevado e execute um segundo script no modo elevado para "fazer as coisas":

    Stop-Process -ProcessName explorer
    Start-Process PowerShell.exe -Verb Runas -ArgumentList "-File path_to_script\script.ps1"
    Start-Process explorer.exe
    

    O verbo Runas fará com que o segundo processo do PowerShell seja iniciado no modo elevado. No entanto, isso acionará um prompt do UAC, portanto, se esse script for executado totalmente automatizado, essa não é uma boa solução.

  2. Crie uma tarefa agendada para iniciar o explorador quando as operações elevadas forem concluídas, execute a tarefa e exclua-a. Você pode usar schtasks.exe para fazer isso:

    schtasks /Create /TN "foobar" /TR explorer.exe /SC OnLogon
    schtasks /Run /TN "foobar"
    schtasks /Delete /TN "foobar" /F
    

    Apenas escolha um nome para a tarefa que não esteja em conflito com outra.

Você também pode combinar os dois métodos acima, para criar uma tarefa agendada para executar o segundo script do PowerShell no modo elevado e o restante não elevado. Isso tem a vantagem de não produzir um prompt do UAC, mas apresenta o risco de segurança de que qualquer pessoa que tenha acesso de gravação ao script possa fazer praticamente qualquer coisa no seu computador. Dependendo de como exatamente você está rodando e elevando seu script atual, isso pode ser um problema discutível.

Uma terceira opção, se o seu script é executado apenas por você, é configurá-lo para iniciar o novo processo explorer.exe com suas credenciais:

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (ConvertTo-SecureString -String "password" -AsPlainText -Force))
Start-Process explorer.exe -Credential $Cred

A desvantagem aqui é ter sua senha armazenada no script em texto simples. Você também pode armazená-lo em um arquivo separado em formato criptografado, digitando o seguinte em um prompt do PowerShell:

Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File C:\pw_encrypted.txt

Em seguida, digite sua senha (ela será mostrada como asteriscos no prompt do PS) e pressione Enter. Agora você pode usá-lo no seu script da seguinte forma:

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (Get-Content C:\pw_encrypted.txt | ConvertTo-SecureString))
Start-Process explorer.exe -Credential $Cred
    
por 26.09.2012 / 12:28
1

A única coisa que vem à mente é usar o agendador de tarefas para relançar o explorador. O processo de partida ou qualquer outro método parece manter o status elevado.

    
por 26.09.2012 / 11:50