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

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

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

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

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?

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

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

10
задан Tim 11 February 2010 в 22:05
поделиться

4 ответа

ОК. После некоторого исследования и тестирования я выяснил проблему. После отключения 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> 
} 
10
ответ дан 4 December 2019 в 04:21
поделиться

Объяснение этого поведения приведено в javadoc для afterExecute :

Примечание: Когда действия заключены в задачи (например, FutureTask) явно или с помощью таких методов, как отправить, эти объекты задачи ловят и поддерживать вычислительные исключения, и таким образом, они не вызывают резкого прекращение и внутреннее исключения не передаются в это способ.

-121--624394-

какую версию Python вы используете? У Python 3.1 нет этой проблемы.

>>> print(len("ë́aúlt"))
6

С уважением Джуди

-121--3503304-

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

0
ответ дан 4 December 2019 в 04:21
поделиться

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

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

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

-4
ответ дан 4 December 2019 в 04:21
поделиться

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

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

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

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

-3
ответ дан 4 December 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: