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

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

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

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

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?

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

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

Ответ 1

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

Я добавил ключ -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> 
} 

Ответ 2

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

Ответ 3

Есть ли способ заставить это работать как администратор, не нажав "да" в окне UAC?

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

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

Ответ 4

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

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

Удачи с моим трюком реестра:)

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