Edite o arquivo hosts a partir do PowerShell

4

Eu preciso gerenciar meus ambientes usando um script do PowerShell. Eu preciso mudar meu arquivo host periodicamente. No entanto, sempre que tento editar o host do meu script, recebo o seguinte erro:

Access to the path C:\windows\system32\drivers\etc\hosts is denied

Atualmente, meu script é assim:

Function ManageHosts([string] $environment)
{
cd C:\windows\system32\drivers\etc
if($environment.StartsWith("p"))
{
get-content .\hosts.prod | set-content .\hosts -force
}
else
{
get-content .\hosts.dev | set-content .\hosts -force
}
}
    
por David Rett 13.08.2013 / 18:01

2 respostas

6

Esta é uma questão de privilégios. Se você é um administrador em sua caixa local, eu posso ajudar.
Tente isto: Clique com o botão direito no ícone do Powershell e selecione Executar como administrador . Em seguida, tente executar seu script; vai funcionar.

No entanto, isso não responde como você pode fazer isso de dentro de um script. Você pode adicionar algum código ao seu script que tentará automaticamente elevar sua sessão de PS, mas você ainda terá que interagir com a caixa de diálogo de segurança que aparece sempre que você tentar e executar algo como um administrador que é o Vista ou posterior. Portanto, não tenho certeza de como isso é mais fácil do que apenas iniciar sua sessão como administrador, mas adicione isso ao início do seu script:

$WindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$WindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($WindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if ($WindowsPrincipal.IsInRole($adminRole))
{
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
}
else
{
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
$newProcess.Verb = "runas";
[System.Diagnostics.Process]::Start($newProcess);
exit
    
por 13.08.2013 / 18:09
2

Você precisa executar esse script com privilégios de administrador. Basta abrir o PowerShell ISE como Administrador e ele deve ser executado.

Se você deseja automatizar a execução do script, será necessário executá-lo como um script de inicialização ou usar o psexec para executar como Sistema ou Administrador ou criar uma tarefa agendada.

    
por 13.08.2013 / 18:12