Vbscript rileva se UAC elevato
-
04-07-2019 - |
Domanda
Come può il mio vbscript rilevare se è in esecuzione in un contesto elevato di Controllo dell'account utente?
Non ho problemi a rilevare l'utente e vedere se l'utente fa parte del gruppo Amministratori. Ma questo non risponde ancora alla domanda se il processo abbia privilegi elevati o meno, quando si esegue in Vista o Windows 2008. Si noti che ho solo bisogno di rilevare questo stato; non tentare di elevare o (err.) de-elevare.
Soluzione
Altri suggerimenti
Ecco la mia soluzione più breve:
Function IsElevated
IsElevated = CreateObject("WScript.Shell").Run("cmd.exe /c ""whoami /groups|findstr S-1-16-12288""", 0, true) = 0
End function
Questa funzione è indipendente e non verrà visualizzata alcuna finestra console lampeggiante quando eseguita.
La soluzione che sto postando è un paio di script VB pronti per la produzione che sfruttano il whoami per trovare queste informazioni. Una cosa interessante è che funzionano con XP (per informazioni disponibili su XP) se si inserisce una copia della versione del Resource Kit di whoami.exe accanto allo script (o nella cartella system32 di ogni macchina).
CSI_IsSession.vbs contiene una singola funzione che può dirti quasi tutto quello che vuoi per conoscere l'UAC o la sessione corrente in cui è in esecuzione lo script.
VBScriptUACKit.vbs (che utilizza CSI_IsSession.vbs) ti consente di richiedere selettivamente UAC in una sceneggiatura rilanciandosi. È stato progettato e sottoposto a debug per funzionare in molti scenari di esecuzione.
Entrambi gli script contengono un codice di esempio che dimostra come utilizzare il codice dello script principale.
un po 'più breve in WSH Jscript
function isElevated(){
var strCaption = "";
for (var enumItems=new Enumerator(GetObject("winmgmts:\\\\.\\root\\CIMV2").ExecQuery("Select * from Win32_OperatingSystem")); !enumItems.atEnd(); enumItems.moveNext()) {
strCaption += enumItems.item().Caption;
}
if(/Vista|2008|Windows\s7|Windows\s8/.test(strCaption)){
return (new ActiveXObject("WScript.Shell").run('cmd.exe /c "whoami /groups|findstr S-1-16-12288"', 0, true)) == 0;
}else{return true}
}
WScript.Echo(isElevated());