Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Требуется доработать скрипт, чтобы при его запуске появлялся запрос на повышение прав (http://forum.oszone.net/showthread.php?t=181057)

okshef 21-07-2010 00:04 1457108

Требуется доработать скрипт, чтобы при его запуске появлялся запрос на повышение прав
 
Здравствуйте, господа программеры!
Задача: есть файл скрипта, находящийся в папке Windows\System32, который выполняется (должен выполняться в Windows 7/Vista). При отключенном UAC все нормально, при включенном - не работает.
Условие: выполнить скрипт без отключения UAC (с появлением запроса на повышение прав) и использования других программ.
Скрипт

Код:

Set oWSH = CreateObject("Wscript.Shell")
Args = ""
Last = Wscript.Arguments.Count - 1
For i = 0 To Last
 Args = Args & " " & Wscript.Arguments.Item(i)
Next
Args = Replace(Args,"\","")
RetVal = oWSH.Run("manage-bde.exe" & Args,0,True)
Wscript.Quit RetVal


Смотрел: http://www.winhelponline.com/article...elevation.html
и
http://forum.script-coding.info/viewtopic.php?pid=32735

Надеюсь на вашу помощь.

Файл скрипта называется manage-bde.vbs

amel27 21-07-2010 06:54 1457265

может через предварительно настроенное задание планировщика запускать?..
поробно: Create Administrator Mode Shortcuts Without UAC Prompts in Windows 7 or Vista

okshef 21-07-2010 08:53 1457303

Нет, скрипт выполняет функции сбора дополнительной информации (аргумента) для команды, выполняемой из командной строки, а запуск осуществляется из реестра с дополнительными ключами.
Это не отдельная задача, поэтому планировщик не пойдет.

Кстати, есть русскоязычный вариант статьи у нас: Упрощаем запуск приложений в Windows 7 от имени администратора без отключения UAC

Vadikan 21-07-2010 13:30 1457528

deepred, нужен просто запрос на повышение прав. Никаких имен пользователя и паролей в скрипте быть не должно.

okshef 22-07-2010 22:18 1458761

deepred, спасибо, но...
Может я неполно оговорил условия. Скрипт запускается из реестра по команде
Код:

wscript.exe manage-bde.vbs -lock -forcedismount %1
Файл manage-bde.vbs находится в Windows\Sysytem32
В настоящий момент вот такая ошибка

Ярлык никакой не нужен, вернее, может его временно в профиль пользователя помещать?

Заменил
Код:

strDstPath      =  "Путь к manage-bde.exe"
на
Код:

strDstPath      =  "%windir%\system32"

deepred 22-07-2010 22:51 1458772

okshef,

ёлки-палки..., ты просто партизан!

По поводу "%windir%\system32", как насчет ExpandEnvironmentString? Но это так, лирика...

Про реестр надо было сказать сразу, если у тебя эта софтина прописана в реестре (кстати, в каком
разделе - не Run kb и в каком корне?) и судя по твоему скрину содержится в Path то, "%windir%\system32"
вообще не нужен (тем более, что "спецальные папки" надо изначально "развернуть").
А ярлык заменится автоматически при новом запуске скрипта, хотя добавь три строчки и его можно
удалять по окончанию сеанса WSH



okshef 22-07-2010 23:00 1458777

HKEY_CLASSES_ROOT\drive\shell....
Цитата:

Цитата deepred
как насчет ExpandEnvironmentString? »

А вот таких вопросов задавать не нужно... :)

Цитата:

Цитата deepred
ёлки-палки..., ты просто партизан! »

Цитата:

Цитата okshef
а запуск осуществляется из реестра с дополнительными ключами. »

так что я говорил

okshef 22-07-2010 23:40 1458806

deepred, может будет понятнее, если я дам ссылку на тему, для чего это все: http://social.technet.microsoft.com/...3-67fe8657bc0f
пост Les Ferch
При отключенном UAC работает превосходно. Нужно, не пользуясь дополнительными программами, запустить скрипт с запросом на повышение прав.

deepred 23-07-2010 00:14 1458831

okshef,

В общем понятно, т.е. у тебя выскочил bug с учетками?

Ладно, тема знакомая, все, что было написано мною ранее остается в силе, но есть одно уточнее... При включенном UAC у тебя что происходит - вообще

ничего или выходит запрет? Тебе надо просто отладить этот скрипт, косяк там кроется в том, что при активном UAC запуск manage-bde может

производиться только от имени учетной записи локального администратора (по идее должен существовать какой-нибудь манифест, в котором

это прописано).

Попробуй просто исключить путь к файлу, если у тебя автоматом он вносится в wshshortcut. Bitlocker штука скользкая, по той ссылке которую ты скинул

есть пост, он в самом конце - я бы его попробовал применить, хотя рассматриваемый вариант должен работать...



okshef 23-07-2010 00:32 1458845

deepred, у меня при включенном UAC не происходит ничего (при исходном скрипте), т.е. скрипт просто не запускается. Есть вариант использовать программу Elevate - но это не красиво: окно командной строки, и пр. и пр.

Как мне казалось поначалу в
Этом
Цитата:

Method 1

This re-launches the current VBScript as administrator (elevated) if the script has no command-line arguments passed. When re-launching the script as administrator, simply pass a bogus argument so that the script does not run in a cyclic loop.

Код:

If WScript.Arguments.length =0 Then
  Set objShell = CreateObject("Shell.Application")
  'Pass a bogus argument with leading blank space, say [ uac]
  objShell.ShellExecute "wscript.exe", Chr(34) & _
  WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else
  'Add your code here
End If

Method 2

This method uses a stub or wrapper script which runs the main VBScript elevated using the runas verb.

Код:

Set objShell = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
strPath = FSO.GetParentFolderName (WScript.ScriptFullName)
If FSO.FileExists(strPath & "\MAIN.VBS") Then
    objShell.ShellExecute "wscript.exe", _
        Chr(34) & strPath & "\MAIN.VBS" & Chr(34), "", "runas", 1
Else
    MsgBox "Script file MAIN.VBS not found"
End If



есть рациональное звено, но как связать - не знаю, ибо, полный ноль.

deepred 23-07-2010 01:04 1458865

okshef,

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

Код:

т.е :

  вместо твоего oWSH.Run("manage-bde.exe" & Args,0,True)

  objShell.ShellExecute "wscript.exe", Chr(34) & _
  "manage-bde.exe" & Chr(34) & " Args", "", "runas", 1

  но не забудь, что это "Shell.Application", а не "Wscript.Shell""

shellExecute(<File>,<Arguments>,<Directory>,<Operation>,<Show>)

Параметры:
<File> - строка. Имя файла.
<Arguments> - строка (необязательный). Параметры для <Operation>.
<Directory> - строка (необязательный). Путь к каталогу с указанным файлом. Если не указан, используется текущий каталог.
<Operation> - строка (необязательный). Действие ("глагол"), которое необходимо выполнить. Если не указан, используется действие по умолчанию.
<Show> - число (необязательный)

okshef 23-07-2010 01:09 1458870

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

Vadikan 24-07-2010 12:44 1459751

Цитата:

Цитата deepred
В общем понятно, т.е. у тебя выскочил bug с учетками? »

Никакого бага с учетками там нет. Для выполнения данного VBS нужны полные права администратора, а если их нет, скрипт не отработает просто. Когда скрипт выполняется при включенном UAC, он запускается с обычными правами. Вот и все.

Будьте проще, сделайте готовый скрипт :)

deepred 24-07-2010 19:23 1459981

Vadikan,

Цитата:

Цитата Vadikan
Никакого бага с учетками там нет»

про баг с учетками читаем по той ссылке, что дал okshef.

Цитата:

Цитата Vadikan
Для выполнения данного VBS нужны полные права администратора, а если их нет, скрипт не отработает просто »

Некоректно замечание: для выполнения скрипта достаточно прав учетной записи, а вот для запуска "manage-bde" уже нужны права администратора (UAC active), но при всем при этот скрипт будет отработан полностью, независмо от того - был ли запущен exe или нет...

Код:

Args = ""

For i = 0 To Wscript.Arguments.Count - 1
    Args = Args & " " & Wscript.Arguments.Item(i)
Next
Args = Replace(Args,"\","")

Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute "manage-bde.exe", Args, "C:\Windows\System32", "runas", 0

Wscript.Echo "Сценарий выполнен"
Wscript.Quit 0

Доп. информация:
Приведенный сценарий работает на Win7 Ultimate и Home Premium, но при проверке не сработал на WinVista Home Premium и Business, хотя это может быть частный случай.

okshef 24-07-2010 21:06 1460031

deepred, СПАСИБО! Отчитываюсь: Windows 7 x 32 Максимальная, сработал чудно. Убрал
Код:

Wscript.Echo "Сценарий выполнен"
О практическом применении читайте в ближайшее время на сайте.

okshef 24-07-2010 21:46 1460051

Блокировка диска, зашифрованного с помощью битлокер, из контекстного меню

Vadikan 24-07-2010 23:09 1460097

deepred, не вижу бага...

Цитата:

Цитата deepred
Некоректно замечание: для выполнения скрипта достаточно прав учетной записи, а вот для запуска "manage-bde" уже нужны права администратора »

Ну так я и сказал
Цитата:

Цитата Vadikan
Для выполнения данного VBS нужны полные права администратора »

Спасибо за скрипт :)


Время: 02:45.

Время: 02:45.
© OSzone.net 2001-