Запустите команду от имени администратора в сценарии PowerShell.UAC

StackOverflow https://stackoverflow.com/questions/2248093

Вопрос

Хорошо, вот моя проблема:

Я пытаюсь запустить скрипт удаленно на сервере.

Я являюсь администратором в обоих окнах, исключения брандмауэра установлены, удаленное администрирование включено, и все остальное выглядит хорошо, насколько я могу видеть.

invoke-command -ComputerName $ComputerName -ScriptBlock `
{
    cd C:\Windows\System32\inetsrv\; 
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files>
}

В ответ я продолжаю получать следующую ошибку

ERROR ( hresult:80070005, message:Failed to commit configuration changes. Access is denied.

Сервер, на котором он пытается запуститься, - это сервер 2k8 R2 box, и я думаю, что проблема связана с UAC.Есть ли какой-нибудь способ запустить это от имени администратора без необходимости нажимать "Да" в поле UAC?

Этот фрагмент кода в конечном итоге превратится в скрипт, который должен быть полностью автоматизирован.

Мы были бы очень признательны за любую помощь.

Это было полезно?

Решение

ХОРОШО.После некоторых исследований и испытаний я понял проблему.После отключения UAC и брандмауэра, а сценарий по-прежнему не работал, я копнул немного глубже и обнаружил, что основная проблема заключалась в том, как команда вызова выполняет команды.он использует учетные данные человека, запускающего сценарий, для аутентификации на сервере, затем пытается использовать другую учетную запись для запуска разрешений или снижает привилегии пользователя, чтобы некоторые команды не могли быть запущены.

Я добавил переключатель -Credentials в команду вызова, и теперь все работает отлично.Исправленный пример кода ниже:

$user = New-Object Management.Automation.PSCredential("$UserName", $securePassword)
invoke-command -ComputerName $ComputerName -Credential $user -ScriptBlock ` 
{ 
    cd C:\Windows\System32\inetsrv\;  
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files> 
} 

Другие советы

Этот кажется, указывает на то, что вам необходимо убедиться, что вы являетесь локальным администратором на удаленном компьютере (хотя, по общему признанию, это специально для WMI).В соответствии с этот вы можете изменить ключ реестра, чтобы запретить применение UAC к удаленному входу в систему администраторов (найдите LocalAccountTokenFilterPolicy).Это не должно отключать UAC, просто не фильтруйте токен, если вы используете powershell/WMI удаленно с учетной записью администратора.

Установите для параметра "EnableLUA" (значение DWORD), найденного в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System, значение 0 и перезагрузите компьютер.

Это отключит UAC без проблем, я бы сделал это для всех ваших пользователей, независимо от того, с разрешением вы или без, потому что UAC Vista настолько ужасен, что я верю, что чем меньше людей им пользуются, тем лучше (по крайней мере, в Vista).Этот трюк работает и в Win7.

Получайте удовольствие от моего трюка с реестром :)

P.S.:Как оказалось, это цензура комментариев, которые показывают, как отключить UAC в отношении моего сообщения / темы с приведенным выше ответом (добросовестный ответ был удален).

Есть ли способ запустить это от имени администратора без необходимости нажимать «Да» в поле UAC?

Если бы это было возможно, это полностью разрушило бы смысл ОАК.

Таким образом, похоже, что ваше единственное реальное решение — отключить UAC на устройстве.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top