2013-07-04 15 views
14

Quelqu'un peut-il m'aider à faire fonctionner vbs mais avec des droits d'administrateur? J'ai besoin de renommer l'ordinateur avec Win8 via vbs mais cela n'est possible que si j'exécute mon script via la ligne de commande de l'administrateur (cmd -> Exécuter en tant qu'administrateur -> runScript.vbs). Si je commence le script avec l'ordinateur cmd classique n'est pas renommé.Comment lancer vbs en tant qu'administrateur de vbs?

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

Est-ce que quelqu'un sait comment je peux faire cela? Merci. McAndy

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 
+0

vérifier l'élévation powertoy http://blogs.technet.com/b/elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx –

+0

Ceci est un excellent code , mais je pense que ce n'est pas la solution de mon problème. Mon problème n'est pas si le script s'exécute en tant qu'administrateur ou non. J'ai besoin de l'exécuter de manière fiable en tant qu'administrateur. Ce code est seulement pour le vérifier, j'ai raison? – Daphnis

+0

nope "Le script suivant va se" relancer "s'il n'est pas déjà surélevé" –

Répondre

19

Si UAC est activé sur l'ordinateur, quelque chose comme cela 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 
+0

C'est pratiquement le même que j'ai essayé. Mais ça ne marche pas. Que signifie exactement UAC?Je l'ai mis à "Ne jamais notifier", est-ce désactivé? Si j'essaye de changer l'option UAC en plus haut cela n'a pas aidé. – Daphnis

+0

"Ne jamais notifier" sur Win8 n'est pas exactement désactivé (vous devrez utiliser des politiques pour le désactiver complètement), mais presque. Le code a bien fonctionné pour moi quand j'ai réactivé l'UAC sur mon testbox Win7. Avez-vous redémarré après avoir changé le niveau de l'UAC? –

+0

Non, je n'ai pas, mais malheureusement, je ne peux pas utiliser UAC activé, car ce script doit fonctionner sans utilisateur. Aucun utilisateur n'attendra pour demander l'accès. Ce script est pour les tests automatiques. N'est-ce pas une autre option? :/ – Daphnis

4

Ajouter ceci au début de votre dossier:

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

Ce code a fonctionné pour moi, la réponse acceptée n'a pas. – gronostaj

+0

@gronostaj Alors, votre chemin de script contient évidemment des espaces, car c'est la seule différence entre cette réponse et la mienne. –

+0

Pourquoi faites-vous ce WshShell = WScript.CreateObject ("WScript.Shell"), puis n'utilisez jamais l'objet? –

2

article de Nice pour les options d'altitude - 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 du niveau de l'utilisateur via les paramètres de registre sous HKCU. Ces paramètres de registre sont efficaces à la volée, de sorte qu'ils peuvent être définis immédiatement avant le lancement d'une application particulière et même supprimés dès le lancement de l'application, si vous le souhaitez. Il suffit de créer une "valeur de chaîne" sous "HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers" pour le chemin d'accès complet à un exécutable avec la valeur "RUNASADMIN". 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" 
+0

Mais j'ai besoin de privilèges élevés pour modifier ce paramètre de registre en premier lieu, non? Type de défaites le but. – masterxilo

2

fichier batch fun 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% 
+1

Pourriez-vous décrire le fonctionnement de ce script? – Lizz

2

`Mon chemin du fichier vbs:

D: \ QTP pratique \ 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}" 

--de google search et un certain réglage, travaillant pour moi