4

Мне нужно иметь возможность управлять своими средами, используя скрипт PowerShell. Мне нужно периодически менять свой хост-файл. Однако всякий раз, когда я пытаюсь отредактировать хост из моего скрипта, я получаю следующую ошибку:

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

В настоящее время мой сценарий выглядит так:

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

2 ответа2

6

Это вопрос привилегий. Если вы администратор в вашем локальном ящике, я могу помочь.
Попробуйте это: щелкните правой кнопкой мыши значок Powershell и выберите « Запуск от имени администратора». Затем попробуйте запустить свой скрипт; это будет работать.

Однако это не ответит, как вы можете сделать это из скрипта. Вы можете добавить некоторый код в ваш скрипт, который автоматически попытается повысить ваш сеанс PS, но вам все равно придется взаимодействовать с диалоговым окном безопасности, которое появляется каждый раз, когда вы пытаетесь запустить что-то в качестве администратора Vista или более поздней версии. Итак, не уверен, насколько это проще, чем просто начать сеанс в качестве администратора, но добавьте это в начало вашего скрипта:

$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
2

Вам нужно запустить этот скрипт с правами администратора. Просто откройте PowerShell ISE с правами администратора и он должен запуститься.

Если вы хотите автоматизировать выполнение сценария, вам необходимо запустить его как сценарий запуска, либо использовать psexec для выполнения в качестве системного или администратора, либо создать запланированное задание.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .