Запустите Command от имени администратора в скрипте PowerShell.UAC - PullRequest
10 голосов
/ 12 февраля 2010

ОК, вот моя проблема:

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

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

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, и я думаю, что проблема связана с UAC,Есть ли способ заставить его работать от имени администратора, не нажимая кнопку «Да» в окне UAC?

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

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

10 голосов
/ 13 февраля 2010

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

Я добавил ключ -Credentials в команду invoke, и теперь все работает отлично. Пример исправленного кода ниже:

$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> 
} 
0 голосов
/ 29 июля 2010

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

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

Веселитесь с моим трюком в реестре:)

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

0 голосов
/ 12 февраля 2010

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

0 голосов
/ 12 февраля 2010

Есть ли способ заставить его работать от имени администратора, не нажимая кнопку Да в окне UAC?

Если бы это было возможно, это полностью уничтожило бы точку UAC.

Таким образом, кажется, что ваше единственное реальное решение - отключить UAC на коробке.

...