Изменение файла hosts из PowerShell

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

Access to the path C:windowssystem32driversetchosts is denied

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

Function ManageHosts([string] $environment)
{
cd C:windowssystem32driversetc
if($environment.StartsWith("p"))
{
get-content .hosts.prod | set-content .hosts -force
}
else
{
get-content .hosts.dev | set-content .hosts -force
}
}
3
задан slhck
30.03.2023 12:44 Количество просмотров материала 2677
Распечатать страницу

2 ответа

это вопрос привилегий. Если вы администратор локального ящика, я могу помочь.

Попробуйте сделать следующее: щелкните правой кнопкой мыши значок 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
6
отвечен Darian Everett 2023-03-31 20:32

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

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

2
отвечен Tanner Faulkner 2023-03-31 22:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх