2013-07-04 10 views
14

Может ли кто-нибудь помочь мне с запуском vbs от себя, но с правами администратора? Мне нужно переименовать компьютер с Win8 через vbs, но это возможно, только если я запустил свой скрипт через командную строку администратора (cmd -> Run as Administrator -> runScript.vbs). Если я запускаю скрипт с классическим cmd-компьютером, он не переименовывается.Как запустить vbs как администратор из vbs?

Моя идея: я запускаю скрипт с правами пользователя, без параметров, и если нет параметров, скрипт запускается с правами администратора и с параметром в качестве идентификатора «Я админ».

Кто-нибудь знает, как я могу это сделать? Спасибо. McAndy

редактировать:

Я попытался это:

If WScript.Arguments.Count = 0 Then 
    Set objShell = CreateObject("Shell.Application") 
    objShell.ShellExecute "wscript.exe", "c:\Users\admin\Documents\selfConfigure.vbs -1", "", runas", 1 
End If 
+0

check elevation powertoy http://blogs.technet.com/b/elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx –

+0

Это отличный код , но я думаю, что это не решение моей проблемы. Моя проблема не получается, если скрипт запущен как admin или нет. Мне нужно надежно запустить его как администратора. Этот код предназначен только для проверки, я прав? – Daphnis

+0

nope «Следующий сценарий« перезапустит сам », если он еще не запущен» –

ответ

19

Если UAC включен на компьютере, что-то, как это должно работать:

If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1 
    WScript.Quit 
End If 

'actual code 
+0

Это практически то же, что я и пытался. Но это не работает. Что именно означает UAC?Я установил его в «Никогда не уведомлять», это отключено? Если я попробую изменить UAC на более высокий вариант, это не помогло. – Daphnis

+0

«Никогда не уведомлять» о Win8 не совсем отключен (вам придется использовать политики, чтобы полностью отключить его), но почти. Код работал отлично для меня, когда я снова включил UAC на своем тестовом поле Win7. Вы перезагрузились после изменения уровня UAC? –

+0

Нет, я этого не сделал, но, к сожалению, я не могу использовать активированный UAC, потому что этот скрипт должен работать без пользователя. Пользователь не будет ждать запроса. Этот скрипт предназначен для автоматических тестов. Разве это не другой вариант? :/ – Daphnis

4

Добавьте это к начало вашего файла:

Set WshShell = WScript.CreateObject("WScript.Shell") 
If WScript.Arguments.Length = 0 Then 
    Set ObjShell = CreateObject("Shell.Application") 
    ObjShell.ShellExecute "wscript.exe" _ 
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 
    WScript.Quit 
End if 
+0

Этот код работал для меня, принятый ответ не сделал. – gronostaj

+0

@gronostaj Тогда ваш путь к сценарию, очевидно, содержит пробелы в нем, потому что это единственное различие между этим ответом и моей. –

+0

Почему вы это делаете WshShell = WScript.CreateObject («WScript.Shell»), а затем никогда не используете этот объект? –

2

Хорошая статья для вариантов высоты - http://www.novell.com/support/kb/doc.php?id=7010269

Настройка приложений Всегда Запрос Повышенные права:

Программы могут быть сконфигурированы, чтобы всегда запрашивать повышение на уровне пользователя с помощью параметров реестра под HKCU. Эти параметры реестра эффективны «на лету», поэтому их можно установить сразу перед запуском конкретного приложения и даже удалить, как только приложение будет запущено, если это необходимо. Просто создайте «String Value» в разделе «HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers» для полного пути к исполняемому файлу со значением «RUNASADMIN». Ниже приведен пример CMD.

Windows Registry Editor Version 5.00 
[HKEY_Current_User\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"c:\\windows\\system32\\cmd.exe"="RUNASADMIN" 
+0

Но мне нужны повышенные привилегии, чтобы изменить этот параметр реестра, в первую очередь, нет? Вид поражения цели. – masterxilo

2

весело лил пакетный файл

@set E=ECHO &set S=SET &set CS=CScript //T:3 //nologo %~n0.vbs /REALTIME^>nul^& timeout 1 /NOBREAK^>nul^& del /Q %~n0.vbs&CLS 
@%E%off&color 4a&title %~n0&%S%CX=CLS^&EXIT&%S%BS=^>%~n0.vbs&%S%G=GOTO &%S%H=shell&AT>NUL 
IF %ERRORLEVEL% EQU 0 (
    %G%2 
) ELSE (
    if not "%minimized%"=="" %G%1 
) 
%S%minimized=true & start /min cmd /C "%~dpnx0"&%CX% 
:1 
%E%%S%%H%=CreateObject("%H%.Application"):%H%.%H%Execute "%~dpnx0",,"%CD%", "runas", 1:%S%%H%=nothing%BS%&%CS%&%CX% 
:2 
%E%%~dpnx0 fvcLing admin mode look up&wmic process where name="cmd.exe" CALL setpriority "realtime"& timeout 3 /NOBREAK>nul 
:3 
%E%x=msgbox("end of line" ,48, "%~n0")%BS%&%CS%&%CX% 
+1

Не могли бы вы описать, как работает этот скрипт? – Lizz

2

`Мой путь VBS файл:

D: \ QTP практика \ Driver \ Testany.vbs'

objShell = CreateObject("Shell.Application") 

objShell.ShellExecute "cmd.exe","/k echo test", "", "runas", 1 

set x=createobject("wscript.shell") 

wscript.sleep(2000) 

x.sendkeys "CD\"&"{ENTER}"&"cd D:"&"{ENTER}"&"cd "&"QTP Practice\Driver"&"{ENTER}"&"Testany.vbs"&"{ENTER}" 

- из поиска и поиска Google некоторые настройки, работающие на меня

Смежные вопросы