Как запустить vbs как администратор из vbs?

Может кто-нибудь помочь мне с запуском VBS от себя, но с правами администратора? Мне нужно переименовать компьютер с Windows 8 через VBScript, но это возможно, только если я запускаю свой скрипт через командную строку администратора (CMD → Запуск от имени администратора → runScript.vbs). Если я запускаю скрипт с классическим CMD, компьютер не переименовывается.

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

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

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

Я попробовал это:

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

Ответы

Ответ 1

Если на компьютере активировано 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

Ответ 2

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

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

Ответ 3

веселый командный файл lil

@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%

Ответ 4

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

Настройка приложений для постоянного запроса повышенных прав:

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

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

Ответ 5

`Мой путь к файлам vbs:

D:\QTP Практика\Драйвер\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 и некоторой настройки, работающей для меня

Ответ 6

Это универсальное и лучшее решение для этого:

If WScript.Arguments.Count <> 1 Then WScript.Quit 1
RunAsAdmin
Main

Sub RunAsAdmin()
    Set Shell = CreateObject("WScript.Shell")
    Set Env = Shell.Environment("VOLATILE")
    If Shell.Run("%ComSpec% /C ""NET FILE""", 0, True) <> 0 Then
        Env("CurrentDirectory") = Shell.CurrentDirectory
        ArgsList = ""
        For i = 1 To WScript.Arguments.Count
            ArgsList = ArgsList & """ """ & WScript.Arguments(i - 1)
        Next
        CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & ArgsList & """", , "runas", 5
        WScript.Sleep 100
        Env.Remove("CurrentDirectory")
        WScript.Quit
    End If
    If Env("CurrentDirectory") <> "" Then Shell.CurrentDirectory = Env("CurrentDirectory")
End Sub

Sub Main()
    'Your code here!
End Sub

Преимущества:

1) Ввод параметров невозможен.
2) Количество аргументов не меняется после повышения до администратора, и тогда вы можете проверить их, прежде чем поднять себя.
3) Вы по-настоящему и сразу узнаете, запускается ли скрипт от имени администратора. Например, если вы вызываете его из записи удаления с панели управления, функция RunAsAdmin не будет запускаться без необходимости, поскольку в этом случае вы уже являетесь администратором. То же самое, если вы вызываете его из сценария, уже повышенного до администратора.
4) Окно сохраняется в его текущем размере и положении, как и должно быть.
5) Текущий каталог не изменяется после получения административных привилегий.

Недостатки: никто