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
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
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
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%
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"
`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
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