web-dev-qa-db-fra.com

Comment exécuter vbs en tant qu'administrateur à partir de vbs?

Quelqu'un peut-il m'aider à exécuter vbs à partir de lui-même, mais avec des droits d'administrateur? J'ai besoin de renommer l'ordinateur avec Windows 8 via VBScript, mais cela n'est possible que si j'exécute mon script via la ligne de commande administrateur (CMD → Exécuter en tant qu'administrateur → runScript.vbs). Si je démarre le script avec CMD classique, l'ordinateur n'est pas renommé.

Mon idée est que je démarre le script avec des droits d'utilisateur, sans paramètres et s'il n'y a pas de paramètre, le script se réexécute avec les droits d'administrateur et avec le paramètre comme identificateur "I'm admin".

Est-ce que quelqu'un sait comment je peux faire ça?

Modifier:

J'ai essayé ceci:

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
17
Daphnis

Si l'UAC est activé sur l'ordinateur, quelque chose comme ça devrait fonctionner:

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
24
Ansgar Wiechers

Ajoutez ceci au début de votre fichier:

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
6
Hussain

fichier batch lil amusant

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

Bel article pour les options d'élévation - http://www.novell.com/support/kb/doc.php?id=7010269

Configuration des applications pour toujours demander des droits élevés:

Les programmes peuvent être configurés pour toujours demander l'élévation au niveau de l'utilisateur via les paramètres du registre sous HKCU. Ces paramètres de registre sont efficaces à la volée, ils peuvent donc être définis immédiatement avant le lancement d'une application particulière et même supprimés dès que l'application est lancée, si vous le souhaitez. Créez simplement un "String Value" en dessous de "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" pour le chemin d'accès complet à un exécutable avec une valeur de "RUN AS ADMIN". Voici un exemple pour CMD.

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

`Mon chemin de fichier 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}"

--à partir de la recherche Google et de certains réglages, travaillant pour moi

2
Hari Krishna

C'est la solution universelle et la meilleure pour cela:

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

Avantages:

1) L'injection de paramètres n'est pas possible.
2) Le nombre d'arguments ne change pas après l'élévation à l'administrateur et vous pouvez ensuite les vérifier avant de vous élever.
3) Vous savez pour de vrai et immédiatement si le script s'exécute en tant qu'administrateur. Par exemple, si vous l'appelez à partir d'une entrée de désinstallation du panneau de configuration, la fonction RunAsAdmin ne s'exécutera pas inutilement car dans ce cas, vous êtes déjà administrateur. Même chose si vous l'appelez depuis un script déjà élevé en administrateur.
4) La fenêtre est conservée à sa taille et sa position actuelles, comme il se doit.
5) Le répertoire actuel ne change pas après l'obtention des privilèges administratifs.

Inconvénients: personne

1
Riccardo La Marca