Пакетный скриптинг, Powershell и не запуск UAC в Windows - PullRequest
4 голосов
/ 30 мая 2011

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

Я понимаю, что этот вид противоречит цели UAC, нобыло бы неплохо, если бы был какой-то способ запуска командных файлов на машинах с включенным UAC.

Эти пакетные файлы должны иметь возможность работать без какого-либо взаимодействия с пользователем (в основном это сценарии входа в систему и некоторые административные сценарии).).Мы не используем домен Active Directory, так что, надеюсь, найдется решение для ни одного домена AD.

Решения, которые я нашел до сих пор, следующие:

  1. Отключите UAC вообще - мы обычно делаем это, но мы можем столкнуться с некоторыми ситуациями, когда мы не можем отключить его.

  2. Создать ярлык для командного файла, который мы хотим запустить в режиме с повышенными правами,Перейдите в свойства ярлыка> вкладка «Ярлык»> «Advaned»> отметьте «Запуск от имени администратора»

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

3.Запуск командного файла с помощью команды 'runas'.

  • Я пробовал это, однако он все еще не видит, как добиться повышения, чтобы предотвратить запрос UAC.
  • Также, используя эхо «пароль» |runas ..... метод для предоставления пароля, кажется, не работает правильно, поэтому мне всегда приходится вводить пароль.

Другая вещь, о которой я думал, но у меня нетна самом деле еще не исследовано, работают ли сценарии powershell лучше / лучше работают в среде, где включен контроль учетных записей?Доверяет ли Windows сертифицированным сценариям PowerShell и позволяет им работать беспрепятственно, не вызывая UAC? ​​

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

Спасибо,

Приветствия

Ответы [ 3 ]

6 голосов
/ 30 мая 2011

Не существует официального способа обойти запрос UAC для вашего приложения.Есть несколько способов запустить программу как administrator, если у вас есть пароль учетной записи (аналогично подходу runas).

Вы можете использовать следующий скрипт Power-Shell, чтобы запустить вашу программу как administratorбез запроса пароля:

Вам нужно сохранить пароль пользователя где-нибудь в виде безопасной строки:

$pass = Read-Host -AsSecureString
ConvertFrom-SecureString $pass | out-file pass.txt

Затем вы можете запустить файл как administrator с сохраненным паролемпуть:

$pass = import-SecureString (get-content pass.txt)
$startinfo = new-object System.Diagnostics.ProcessStartInfo
$startinfo.UserName = "administrator"
$startinfo.Password = $pass
$startinfo.FileName = "your batch script file name"
$startinfo.UseShellExecute = $true
[System.Diagnostics.Process]::Start($startinfo)
3 голосов
/ 30 мая 2011

Операции с реестром, к которым у текущего пользователя есть доступ, сами по себе не вызовут приглашение UAC.

Однако при использовании приложения с манифестом, требующим повышения прав, если администратор будет выполнять запросы без прав администратора.

Вы пытаетесь использовать regedit.exe для выполнения пакетной операции?В этом случае замените на reg.exe (используя cmd.exe) или, что еще лучше, поддержку встроенного реестра PowerShell.

Например,

get-itemproperties 'HKLM:\SOFTWARE\Classes\Folder'

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


Альтернативный подход, если вы выполняете операции, требующие административного доступа (необходимо изменить доступ к некоторому объекту с ACL, который ограничиваетмодификация для администраторов).Или что-то, что не администратор никогда не сможет сделать UAC или нет, без ввода учетных данных учетной записи администратора.

Рассмотрите возможность использования Task Scheduler: триггер при входе пользователя в систему, но настроенный под определенной учетной записью администратора с повышенными правами.

Резюме: действительно нужно знать, по крайней мере, одну из вещей, которые вы делаете, которые вызывают UAC в деталях.

1 голос
/ 30 мая 2011

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

...