IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos Contributions VBScript Discussion :

Connecté en tant qu'administrateur ? [FAQ]


Sujet :

Vos Contributions VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Mon but était de créer un script WSH (donc pas d’API) permettant de savoir si un utilisateur à les droits administrateur (local ou domaine), sans avoir à questionner Active Directory via LDAP ou autre. Les Scripting Guys apportent une partie de réponse avec cet article. Sinon sur Windows Server 2003 il existe un objet COM ManageYourServer (je n’ai pas testé).

    Bon du coup j'ai concocté 2 scripts :

    Le 1er inspiré par un script où l’auteur test les droits de l’utilisateur en mappant un lecteur réseau (Une lettre de lecteur doit être réservée à l’usage de ce script ).
    Le mien est plus discret puisqu’il teste le droit de lecture d’une clé système dans le registre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Const HKEY_USERS = &H80000003
    Const READ_CONTROL = &H20000
     
    Set objRegistry=GetObject("winmgmts:root\default:StdRegProv")
    objRegistry.CheckAccess HKEY_USERS, "S-1-5-19", READ_CONTROL, blnIsAdmin
     
    If blnIsAdmin = true Then
        WScript.Echo "Admin"
    Else
        WScript.Echo "Pas admin"
    End If
    Pas convaincu ? Voilà un moyen plus fin (mais également plus long et complexe) de vérifier les droits d’un utilisateur en fonction des SID des groupes auxquels il appartient (S-1-5-32-544 pour le groupe Administrateurs).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Peut être que ça pourrait faire un point de la FAQ non ?

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Une tuerie
    Ce script est une tuerie !
    Merci mille fois, il m'a sauvé la vie !

  3. #3
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    La 2eme méthode ne gère pas l'imbrication des groupes hélas.

    La première est prope en revanche, j'utilisait un accès à \\PC\Admin$ et ca foirait parfois pour des raisons obscures...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insertion valeur null en tant qu'administrateur
    Par new_wave dans le forum SQL
    Réponses: 3
    Dernier message: 06/11/2007, 11h28
  2. Réponses: 0
    Dernier message: 21/10/2007, 16h44
  3. Réponses: 4
    Dernier message: 19/09/2007, 14h01
  4. Réponses: 1
    Dernier message: 26/07/2007, 01h37
  5. Réponses: 3
    Dernier message: 27/04/2007, 19h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo