windows vbscript administrator elevated-privileges

windows - ¿Cómo ejecutar vbs como administrador de vbs?



vbscript administrator (6)

Agregue esto al comienzo de su archivo:

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

¿Puede alguien ayudarme a ejecutar vbs desde sí mismo pero con derechos de administrador? Necesito cambiar el nombre de la computadora con Windows 8 a través de VBScript, pero solo es posible si ejecuto mi secuencia de comandos a través de la línea de comandos del administrador (CMD → Ejecutar como administrador → runScript.vbs). Si comienzo el script con el CMD clásico, no se cambia el nombre de la computadora.

Mi idea es que comience el script con derechos de usuario, sin parámetros y si no hay un parámetro, el script se vuelve a ejecutar con los derechos de administrador y con el identificador "I''m admin".

¿Alguien sabe cómo puedo hacer esto?

Editar:

Intenté esto:

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


Buen artículo para las opciones de elevación: http://www.novell.com/support/kb/doc.php?id=7010269

Configurando aplicaciones para solicitar siempre derechos elevados:

Los programas pueden configurarse para solicitar siempre la elevación en el nivel de usuario a través de la configuración del registro bajo HKCU. Estas configuraciones de registro son efectivas sobre la marcha, por lo que pueden establecerse inmediatamente antes del lanzamiento de una aplicación particular e incluso eliminarse tan pronto como se inicie la aplicación, si así lo desea. Simplemente cree un "Valor de cadena" en "HKCU / Software / Microsoft / Windows NT / CurrentVersion / AppCompatFlags / Layers" para la ruta completa a un ejecutable con un valor de "RUNASADMIN". A continuación se muestra un ejemplo para CMD.

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


Esta es la solución universal y mejor para esto:

If WScript.Arguments.Count <> 1 Then WScript.Quit RunAsAdmin Main Sub RunAsAdmin If CreateObject("WScript.Shell").Run("%ComSpec% /C NET FILE", 0, True) <> 0 Then 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.Quit End If End Sub Sub Main() MsgBox WScript.Arguments.Count End Sub

Ventajas:

1) La inyección de parámetros no es posible.
2) La cantidad de argumentos no cambia después de la elevación al administrador y luego puede verificarlos antes de elevarse.
3) Usted sabe de verdad e inmediatamente si el script se ejecuta como administrador. Por ejemplo, si lo llama desde una entrada de desinstalación del panel de control, la función RunAsAdmin no se ejecutará innecesariamente porque en ese caso ya es un administrador. Lo mismo si lo llamas desde un script ya elevado a administrador.
4) La ventana se mantiene en su tamaño y posición actuales, como debería ser.

Advertencias:

1) El parámetro "Directorio de trabajo" no tiene efecto si el parámetro "verbo" es "runas".


Si UAC está habilitado en la computadora, algo como esto debería funcionar:

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


`Mi ruta de archivo vbs:

D: / QTP Practice / 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}"

--desde la búsqueda de google y algunos ajustes, trabajando para mí


divertido archivo por lotes 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%