4 votos

Editar archivo hosts desde PowerShell

Que necesito poder administrar mis entornos utilizando un script de PowerShell. Necesito cambiar mi archivo host periódicamente. Sin embargo, cuando intento editar el host de mi escritura, me sale el siguiente error:

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

Actualmente mi script se ve así:

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
}
}

6voto

Nicolas Bourbaki Puntos 174

Esta es una cuestión de privilegios. Si usted es un administrador en el cuadro local, me pueden ayudar.
Prueba esto: haz clic Derecho en el icono de Powershell y seleccione Ejecutar Como Administrador. A continuación, pruebe a ejecutar la secuencia de comandos; va a trabajar.

Sin embargo, esto no responde a cómo se puede hacer esto desde dentro de una secuencia de comandos. Usted puede agregar algo de código para que el script que automáticamente se trata de hacer que tu PS sesión elevado, pero usted todavía tiene que interactuar con el cuadro de diálogo de seguridad que se muestra en cualquier momento de intentar ejecutar algo como un admin que la Vista o posterior. Así que, no estoy seguro de cuánto más fácil es este que acaba de empezar su sesión como administrador, pero agregar esto al principio de la secuencia de comandos:

$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

2voto

Tanner Faulkner Puntos 7504

Necesita ejecutar este script con privilegios de administrador. Basta con abrir PowerShell ISE como administrador y debe funcionar.

Si usted está buscando para automatizar el funcionamiento de la secuencia de comandos, necesitará ejecutar este como un script de inicio, o usar psexec para ejecutar como administrador o sistema o crear una tarea programada.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: