Automatisation de la création de comptes d'ordinateur

Résumé

Cet article explique comment automatiser la création de comptes d'ordinateur. Deux méthodes sont décrites :
  • NETDOM (un outil du Kit de ressources de Windows 2000 également disponible dans X86\Support\Tools\Support.cab sur le CD-ROM du système d'exploitation) ;
  • script du compte d'ordinateur en utilisant ADSI et Windows Script Host.

Plus d'informations

Création de comptes d'ordinateur en utilisant NETDOM

REMARQUE : seule la version Windows 2000 de NETDOM, qui est incluse dans le Kit de ressources de Windows 2000, doit être utilisée. Les versions précédentes ne fonctionnent pas correctement pour l'ensemble des fonctionnalités de Windows 2000.


Vous pouvez utiliser NETDOM à partir de la ligne de commande (ou l'appeler à partir d'un fichier de commandes) pour scripter la création du compte d'ordinateur en utilisant la syntaxe indiquée ci-après. Cet exemple crée uniquement le compte d'ordinateur et décrit la manière dont peuvent être spécifiées les informations d'identification d'un utilisateur ayant l'autorisation de créer des comptes d'ordinateur dans le domaine.
NETDOM /Domain:MYDOMAIN /user:adminuser /password:apassword MEMBER MYCOMPUTER /ADD
Pour plus d'informations sur l'utilisation de NETDOM, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

150493 Procédures pour joindre un domaine à partir de la ligne de commande

Script du compte d'ordinateur en utilisant ADSI et Windows Script Host

En utilisant les interfaces d'Active Directory Services (ADSI) et Windows Script Host (WSH), un administrateur peut créer un script Visual Basic (VBScript) pour automatiser la création des comptes d'ordinateur.


Pour plus d'informations sur Visual Basic Scripting, veuillez visiter le site Web Microsoft dont l'adresse figure ci-après :

Pour utiliser cette méthode, créez un script tel que celui mentionné dans ci-dessous, puis enregistrez le fichier avec une extension .vbs. Pour exécuter le fichier, double-cliquez sur ce dernier ou tapezcscript myscript.vbslors d'une invite de commande.

Exemple de script

'***********************
'* Début du script
'***********************

Dim sComputerName, sUserOrGroup, sPath, computerContainer, rootDSE, lFlag
Dim secDescriptor, dACL, ACE, oComputer, sPwd

'*********************************************************************
'* Déclare les constantes utilisées lors de la définition de l'emplacement par défaut du
'* compte d'ordinateur, des balises pour identifier l'objet en tant que compte d'ordinateur
'* et des balises de sécurité
'*********************************************************************

Const UF_WORKSTATION_TRUST_ACCOUNT = &H1000
Const UF_ACCOUNTDISABLE = &H2
Const UF_PASSWD_NOTREQD = &H20
Const ADS_GUID_COMPUTRS_CONTAINER = "aa312825768811d1aded00c04fd8d5cd"
Const ADS_ACETYPE_ACCESS_ALLOWED = 0
Const ADS_ACEFLAG_INHERIT_ACE = 2

'*********************************************************************
'* Définit les balises sur cet objet afin de l'identifier en tant que compte d'ordinateur
'* et déterminer son nom. Dans cet exemple, le nom est utilisé statiquement mais il peut
'* être déterminé par un paramètre de ligne de commande ou par l'utilisation d'un InputBox
'*********************************************************************

lFlag = UF_WORKSTATION_TRUST_ACCOUNT Or UF_ACCOUNTDISABLE Or UF_PASSWD_NOTREQD
sComputerName = "TestAccount"

'*********************************************************************
'* Établit un chemin d'accès au conteneur dans Active Directory où
'* le compte d'ordinateur sera créé. Dans cet exemple, le chemin d'accès
'* recherchera automatiquement un contrôleur de domaine pour le domaine, lira le nom dudit contrôleur
'* du domaine et se connectera au conteneur "Ordinateurs" par défaut
'*********************************************************************

Set rootDSE = GetObject("LDAP://RootDSE")
sPath = "LDAP://<WKGUID=" & ADS_GUID_COMPUTRS_CONTAINER
sPath = sPath + ","
sPath = sPath + rootDSE.Get("defaultNamingContext")
sPath = sPath + ">"
Set computerContainer = GetObject(sPath)
sPath = "LDAP://" & computerContainer.Get("distinguishedName")
Set computerContainer = GetObject(sPath)

'*********************************************************************
'* Dans cet exemple, le compte d'ordinateur est créé. Certains attributs doivent
'* avoir une valeur avant d'appeler .SetInfo pour valider (écrire) l'objet
'* dans Active Directory
'*********************************************************************

Set oComputer = computerContainer.Create("computer", "CN=" & sComputerName)
oComputer.Put "samAccountName", sComputerName + "$"
oComputer.Put "userAccountControl", lFlag
oComputer.SetInfo

'*********************************************************************
'* Établit un mot de passe par défaut pour le compte d'ordinateur
'*********************************************************************

sPwd = sComputerName & "$"
sPwd = LCase(sPwd)
oComputer.SetPassword sPwd

'*********************************************************************
'* Spécifie l'utilisateur ou le groupe qui peut activer/joindre cet ordinateur au
'* domaine. Dans cet exemple, " MYDOMAIN" est le nom du domaine et
'* "JoeSmith" est le compte auquel une autorisation est octroyée. Notez que
'* dans cet exemple c'est la convention de nommage de bas niveau qui est utilisée.
'*********************************************************************

sUserOrGroup = "MYDOMAIN\joesmith"

'*********************************************************************
'* Effectue la liaison avec les ACL conditionnelles sur le compte d'ordinateur nouvellement créé
'* et crée une rubrique de contrôle d'accès (ACE) qui permet à
'* l'utilisateur ou au groupe spécifié de contrôler entièrement le compte d'ordinateur
'*********************************************************************

Set secDescriptor = oComputer.Get("ntSecurityDescriptor")
Set dACL = secDescriptor.DiscretionaryAcl
Set ACE = CreateObject("AccessControlEntry")

'*********************************************************************
'* Un AccessMask de "-1" accorde un contrôle total
'*********************************************************************

ACE.AccessMask = -1
ACE.AceType = ADS_ACETYPE_ACCESS_ALLOWED
ACE.AceFlags = ADS_ACEFLAG_INHERIT_ACE

'*********************************************************************
'* Accorde ce contrôle à l'utilisateur ou au groupe spécifié auparavant.
'*********************************************************************

ACE.Trustee = sUserOrGroup

'*********************************************************************
'* Ajoute maintenant cette ACE à la DACL sur le compte d'ordinateur
'*********************************************************************

dACL.AddAce ACE
secDescriptor.DiscretionaryAcl = dACL

'*********************************************************************
'* Valide (écrit) les modifications ayant trait à la sécurité sur le compte d'ordinateur
'*********************************************************************

oComputer.Put "ntSecurityDescriptor", Array(secDescriptor)
oComputer.SetInfo

'*********************************************************************
'* Active le compte une fois tous les paramètres et autorisations
'* définis
'*********************************************************************

oComputer.AccountDisabled = False
oComputer.SetInfo

'*********************************************************************
'* Crée une rubrique de contrôle d'accès (ACE) qui accorde à l'utilisateur ou au
'* groupe spécifié un contrôle total sur le compte d'ordinateur
'*********************************************************************

wscript.echo "The command completed successfully."

'*****************
'* Fin du script
'*****************
Propriétés

ID d'article : 222525 - Dernière mise à jour : 8 août 2007 - Révision : 1

Commentaires