Хорошо, вот моя проблема:
Я пытаюсь запустить скрипт на сервере удаленно.
Я являюсь администратором в обоих полях, исключения брандмауэра на месте, удаленный администратор включен, а все остальное выглядит хорошо, что я вижу.
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?
Этот кусок кода в конечном итоге станет сценарием, который должен быть полностью автоматизирован.
Любая помощь будет принята с благодарностью.
ОК. После некоторого исследования и тестирования я выяснил проблему. После отключения 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>
}
Объяснение этого поведения приведено в javadoc для afterExecute :
-121--624394-Примечание: Когда действия заключены в задачи (например, FutureTask) явно или с помощью таких методов, как отправить, эти объекты задачи ловят и поддерживать вычислительные исключения, и таким образом, они не вызывают резкого прекращение и внутреннее исключения не передаются в это способ.
какую версию Python вы используете? У Python 3.1 нет этой проблемы.
>>> print(len("ë́aúlt"))
6
С уважением Джуди
-121--3503304-Это , похоже, указывает на то, что вы должны быть локальным администратором на удаленном компьютере (хотя, по общему признанию, это специально для WMI). В соответствии с этим можно изменить раздел реестра, чтобы остановить применение UAC к удаленным входам для администраторов (поиск LocalAccountTokenFilterPolicy). Это не должно отключать UAC, но не фильтровать маркер, если вы используете powershell/WMI удаленно с учетной записью администратора.
Есть ли способ запустить это от имени администратора, не нажимая "Да" в поле UAC?
Если бы это было возможно, это полностью лишило бы смысла UAC.
Таким образом, похоже, что ваше единственное реальное решение - отключить UAC на приставке.
Установите параметр "EnableLUA" (значение DWORD) в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System на 0 и перезагрузитесь.
Это отключит UAC без проблем, я бы сделал это для всех ваших пользователей, с разрешением или без, зависит от вас, потому что UAC в Vista настолько ужасен, что я считаю, чем меньше людей его включат, тем лучше (по крайней мере в vista). Этот трюк работает и в Win7.
Повеселитесь с моим трюком с реестром :)
P.S.: Как оказалось, SO цензурирует комментарии, которые показывают, как отключить UAC, что касается моего сообщения/темы с вышеуказанным ответом (старательный ответ был удален).