1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
   | Option Explicit
 
wscript.echo "Admin : " & IsAdmin()
 
Function IsAdmin()
    'On Error Resume Next
 
    'Résultat à déterminer
    IsAdmin = False
 
    'Les ruches utilisées
    Const HKEY_CURRENT_USER = &H80000001
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_USERS = &H80000003 
 
    'Identifiant utilisateur (User ID)
    Dim strRegKey, strRegValue, strCurrentUserID, strUserID
    strRegKey = "Identities"
    strRegValue = "Default User ID"
 
    'SID utilisateur
    Dim strSID, arrSID
 
    'Groupes auxquels l'utilisateur appartient
    Dim strRegGroupPolicy, strRegGroupMembership, strGroup, arrGroup, strGroupSID
    strRegGroupPolicy = "SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\"
    strRegGroupMembership = "\GroupMembership"
 
    'Accès au registre
    Dim objRegistry : Set objRegistry=GetObject("winmgmts:root\default:StdRegProv")
 
    'Récupère l'identifiant (User ID) de l'utilisateur connecté
    objRegistry.GetStringValue HKEY_CURRENT_USER, strRegKey, strRegValue, strCurrentUserID
    'pour le comparer aux comptes enregistrés et ainsi déterminer le SID de l'utilisateur
    objRegistry.EnumKey HKEY_USERS, "", arrSID
 
    'Parcours des comptes enregistrés
    For Each strSID In arrSID
 
        'Omission des comptes systèmes ainsi que des comptes suffixés par _Classes
        If strSID <> ".DEFAULT" And strSID <> "S-1-5-18" And _
           strSID <> "S-1-5-19" And strSID <> "S-1-5-20" And _
           Right(strSID, 8) <> "_Classes" Then
 
              'Récupére le UserID du compte qui est peut être celui de l'utilisateur connecté
              objRegistry.GetStringValue HKEY_USERS, strSID & "\" & strRegKey, strRegValue, strUserID
 
              'Vérifie si les UserID correspondent 
              'et donc si le SID du compte parcouru est bien celui de l'utilisateur connecté
              If strCurrentUserID = strUserID Then
 
                  'Liste les SID des groupes auquels appartient l'utilisateur
                  objRegistry.EnumValues HKEY_LOCAL_MACHINE, strRegGroupPolicy & strSID & strRegGroupMembership, arrGroup
                  For Each strGroup In arrGroup
 
                      'Regarde parmis les SID si le groupe Administrateurs (S-1-5-32-544) y figure
                      objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strRegGroupPolicy & strSID & strRegGroupMembership, strGroup, strGroupSID
                      If strGroupSID = "S-1-5-32-544" Then
                          'Si oui l'utilisateur peut être considéré comme administrateur 
                          IsAdmin = True
                          Exit Function
                      End If
                  Next
 
                  'Quitte, Admin ou pas, puisque le compte de l'utilisateur a bien été vérifié
                  Exit Function
              End If           
        End If
    Next 
End Function | 
Partager