2013-07-04 117 views
14

Qualcuno può aiutarmi con l'esecuzione di vbs da solo ma con i diritti di amministratore? Ho bisogno di rinominare il computer con Win8 via vbs ma è possibile solo se eseguo il mio script tramite la riga di comando dell'amministratore (cmd -> Esegui come amministratore -> runScript.vbs). Se avvio lo script con il classico computer cmd non viene rinominato.Come eseguire vbs come amministratore da vbs?

La mia idea è di iniziare lo script con diritti utente, senza parametri e se non ci sono parametri, lo script si esegue con i diritti di amministratore e con parametro come identificatore "I am admin".

Qualcuno sa come posso fare questo? Grazie. McAndy

edit:

ho provato questo:

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

verifica elevazione powertoy http://blogs.technet.com/b/elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx –

+0

Questo è un ottimo codice , ma penso che non sia la soluzione del mio problema. Il mio problema non si ottiene se lo script è in esecuzione come amministratore o meno. Ho bisogno di eseguirlo in modo affidabile come amministratore. Questo codice è solo per controllarlo, ho ragione? – Daphnis

+0

no "Il seguente script" si riavvierà da solo "elevato se non è già in esecuzione elevata" –

risposta

19

Se UAC è abilitato sul computer, qualcosa di simile a questo dovrebbe funzionare:

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

È praticamente lo stesso di quello che ho provato. Ma non sta funzionando. Che cosa significa esattamente UAC abilitato?L'ho impostato su "Non inviare notifiche", è disabilitato? Se provo a cambiare l'UAC con l'opzione superiore, non è stato d'aiuto. – Daphnis

+0

"Non notificare mai" su Win8 non è esattamente disabilitato (dovresti usare le politiche per disabilitarlo completamente), ma quasi. Il codice ha funzionato bene per me quando ho riattivato UAC sul mio testbox Win7. Hai riavviato dopo aver cambiato il livello UAC? –

+0

No, non l'ho fatto, ma sfortunatamente non posso usare UAC abilitato perché questo script deve funzionare senza utente. Nessun utente attenderà per chiedere l'accesso. Questo script è per test automatici. Non è un'altra opzione? :/ – Daphnis

4

Aggiungere questo al inizio del file:

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

Questo codice ha funzionato per me, la risposta accettata no. – gronostaj

+0

@gronostaj Quindi il percorso di script ha ovviamente degli spazi, perché questa è l'unica differenza tra questa e la mia. –

+0

Perché si fa questo WshShell = WScript.CreateObject ("WScript.Shell") e quindi non si usa mai l'oggetto? –

2

Nizza articolo per le opzioni di elevazione - http://www.novell.com/support/kb/doc.php?id=7010269

Configurazione di applicazioni di richiedere sempre Elevated Rights:

I programmi possono essere configurati per richiedere sempre altitudine sul livello utente tramite le impostazioni del Registro di sistema HKCU. Queste impostazioni di registro sono effettive al volo, quindi possono essere impostate immediatamente prima di avviare un'applicazione specifica e persino rimosse non appena viene avviata l'applicazione, se lo si desidera. Basta creare un "Valore stringa" in "HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers" per il percorso completo di un eseguibile con un valore di "RUNASADMIN". Di seguito è riportato un esempio per CMD.

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

Ma ho bisogno di privilegi elevati per modificare le impostazioni del registro in primo luogo, no? Tipo di sconfitte lo scopo. – masterxilo

2

file di divertimento lil lotto

@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

Potresti descrivere come funziona questo script? – Lizz

2

`Il mio percorso del file 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}" 

--da ricerca google e un po 'di tuning, funzionando per me