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

VBScript Discussion :

Modification utilisateur Active Directory


Sujet :

VBScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Modification utilisateur Active Directory
    Bonjour à tous,
    je viens souvent sur ce forum afin de trouver des informations à mes problèmes de scripting, et je vous remercie pour l'aide que j'ai pu trouver ainsi que pour votre aide à mon problème actuel.
    J'ai déjà lu des posts sur des modifications sur un Active Directory en vbs.
    Par contre, je n'ai pas vu (ou réussi à voir) de solution à mon problème actuel :

    Pour faire clair, je dois modifier le chemin HomeDirectory de (presque tous les utilisateurs) présents dans une certaine OU mais aussi dans toutes les "sous-OU" de cette première OU :

    OU=Users & Groups,OU=Toulouse,DC=*,DC=*,DC=*,DC=*,DC=*
    et donc modifier tous les utilisateurs qu'on peut trouver sous cette OU contenant d'autres OU bien évidemment (OU DSI, OU DAF, etc).

    J'ai déjà fait le script .vbs me permettant de modifier le lecteur et le chemin du HomeDir pour chaque utilisateur dans une OU précisée mais je n'arrive pas à aller dans les autres dossiers comme l'on peut faire avec SubFolders...

    Ci-dessous mon code (pour des raisons professionnelles et de confidentialité, j'ai du cacher les noms et chemins exacts, merci de votre compréhension) :
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    '#########################################################
    'Script .vbs pour modification des objets utilisateurs
    'Changement du champ Home Directory des utilisateurs
    'dans une OU précisée
    '
    'version 1.3
    'Author :*
    'Release : */2013
    '
    'Test sur l'OU des users de la DSI Toulouse
    '
    '#########################################################
     
    'Déclaration des variables principales
    'ShareName --> Dossier de partage réseau
    'objParent --> OU où chercher les objets User, Array sur User
    'strDrive --> Lettre de montage du lecteur
    'Compteur --> Connaître le nombre de modification
     
    Dim objLogFile, fso
    ShareName = "share\Home"
    set objParent = GetObject("LDAP://OU=Users & Groups,OU=Toulouse,DC=*")
    objParent.Filter = Array("user")
    strDrive = "H:"
    Compteur = 0
    CompteurLecteur = 0
    CompteurHomeVide = 0
    CompteurOK = 0
     
    'Déclaration Logfile
    'Ouverture du fichier Log Change_HomeDir_AD_Toulouse
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objLogFile = fso.OpenTextFile ("C:\Change_HomeDir_AD_Toulouse_" &day(now) & "_" &month(now) & "_" &year(now)&".log",2,true)
     
    objLogFile.Writeline vbTab & "#########################################"
    objLogFile.Writeline vbTab & "# Script started at " & Now & " #"
    objLogFile.Writeline vbTab & "#########################################"
    objLogFile.Writeline vbCrLf
     
    'Pour chaque objet User trouvé
    'Changement du champ HomeDir de l'utilisateur
    'Si le HomeDir est sur Oldserver
    for each objUser in objParent
    	if objUser.HomeDirectory = "\\oldserver\home\%username%" and objUser.homeDrive = "H:" then
    		objUser.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & _
    		objUser.Get("sAMAccountName")
    		objUser.homeDrive = strDrive
    		objUser.SetInfo
    		objLogFile.Writeline  "- Champ HomeDirectory : " & objUser.HomeDirectory & vbCrLf & vbTab & " montée sur le lecteur " & objUser.homeDrive & " est appliquée sur l'utilisateur : " & objUser.Get("sAMAccountName") & "."
    		objLogFile.Writeline vbCrLf
    		Compteur = Compteur + 1
    	else
    		if objUser.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & objUser.Get("sAMAccountName") then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " a déjà sa Home sur newserver !"
    			objLogFile.Writeline vbCrLf
    			CompteurOK = CompteurOK + 1
    		end if
    		if objUser.HomeDirectory = "" then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " n'a pas de Home rensignée !"
    			objLogFile.Writeline vbCrLf
    			CompteurHomeVide = CompteurHomeVide + 1
    		end if
    		if objUser.homeDrive <> "H:" then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " a sa Home sur le lecteur " & objUser.homeDrive & " !"
    			objLogFile.Writeline vbCrLf
    			CompteurLecteur = CompteurLecteur + 1
    		end if
    	end if
    next
     
     
    'Fin et fermeture du fichier log
    objLogFile.Writeline vbTab & "--> Nombre de modifications sur l'OU de Toulouse : " & Compteur
    objLogFile.Writeline vbTab & "--> Nombre de personnes sur un autre lecteur que H: : " & CompteurLecteur
    objLogFile.Writeline vbTab & "--> Nombre de personnes n'ayant pas de lecteur Home : " & CompteurHomeVide
    objLogFile.Writeline vbTab & "--> Nombre de personnes déjà connectées sur newserver : " & CompteurOK
    objLogFile.Writeline vbCrLf
    objLogFile.Writeline vbTab & "#######################################"
    objLogFile.Writeline vbTab & "# Script ended at " & Now & " #"
    objLogFile.Writeline vbTab & "#######################################"
    objLogFile.close
     
    'Cleanup des objets
    Set fso = Nothing
    Set objLogFile = Nothing
     
    'Sortie du script
    WScript.Quit()
    Avec cela, c'est bon pour la modification du HomeDir et du lecteur réseau, mais si vous pouvez m'aider sur comment descendre dans les sous-OU, vous seriez vraiment adorable !!

    merci d'avance pour votre aide et bonne journée à tous
    Filmaster.

  2. #2
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Pour parcourir les sous-OU, il te faut une fonction récursive.
    Voici un exemple avec une modification de ton code (pas testé) :
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    '#########################################################
    'Script .vbs pour modIfication des objets utilisateurs
    'Changement du champ Home Directory des utilisateurs
    'dans une OU précisée
    '
    'version 1.3
    'Author :*
    'Release : */2013
    '
    'Test sur l'OU des users de la DSI Toulouse
    '
    '#########################################################
     
    'Déclaration des variables prIncipales
    'ShareName --> Dossier de partage réseau
    'objParent --> OU où chercher les objets User, Array sur User
    'strDrive --> Lettre de montage du lecteur
    'Compteur --> Connaître le nombre de modIfication
     
    Dim objLogFile, fso
    ShareName = "share\Home"
    set objParent = GetObject("LDAP://OU=Users & Groups,OU=Toulouse,DC=*")
    strDrive = "H:"
    Compteur = 0
    CompteurLecteur = 0
    CompteurHomeVide = 0
    CompteurOK = 0
     
    'Déclaration Logfile
    'Ouverture du fichier Log Change_HomeDir_AD_Toulouse
    Set fso = CreateObject("ScriptIng.FileSystemObject")
    Set objLogFile = fso.OpenTextFile ("C:\Change_HomeDir_AD_Toulouse_" &day(now) & "_" &month(now) & "_" &year(now)&".log",2,true)
     
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbTab & "# Script started at " & Now & " #"
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbCrLf
     
    UsersHomeDirModIficationRecursive objParent
     
    'Fin et fermeture du fichier log
    objLogFile.WritelIne vbTab & "--> Nombre de modIfications sur l'OU de Toulouse : " & Compteur
    objLogFile.WritelIne vbTab & "--> Nombre de personnes sur un autre lecteur que H: : " & CompteurLecteur
    objLogFile.WritelIne vbTab & "--> Nombre de personnes n'ayant pas de lecteur Home : " & CompteurHomeVide
    objLogFile.WritelIne vbTab & "--> Nombre de personnes déjà connectées sur newserver : " & CompteurOK
    objLogFile.WritelIne vbCrLf
    objLogFile.WritelIne vbTab & "#######################################"
    objLogFile.WritelIne vbTab & "# Script Ended at " & Now & " #"
    objLogFile.WritelIne vbTab & "#######################################"
    objLogFile.close
     
    'Cleanup des objets
    Set fso = NothIng
    Set objLogFile = NothIng
     
    'Sortie du script
    WScript.Quit()
     
    Sub UsersHomeDirModIficationRecursive(objRootOu)
    	For Each objTmp In objRootOu
    		'Pour chaque objet User trouvé
    		'Changement du champ HomeDir de l'utilisateur
    		'Si le HomeDir est sur Oldserver
    		If objTmp.Class = "user" Then
    			If objTmp.HomeDirectory = "\\oldserver\home\%username%" and objTmp.homeDrive = "H:" then
    				objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & _
    				objTmp.Get("sAMAccountName")
    				objTmp.homeDrive = strDrive
    				objTmp.SetInfo
    				objLogFile.WritelIne  "- Champ HomeDirectory : " & objTmp.HomeDirectory & vbCrLf & vbTab & " montée sur le lecteur " & objTmp.homeDrive & " est appliquée sur l'utilisateur : " & objTmp.Get("sAMAccountName") & "."
    				objLogFile.WritelIne vbCrLf
    				Compteur = Compteur + 1
    			else
    				If objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & objTmp.Get("sAMAccountName") then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a déjà sa Home sur newserver !"
    					objLogFile.WritelIne vbCrLf
    					CompteurOK = CompteurOK + 1
    				End If
    				If objTmp.HomeDirectory = "" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " n'a pas de Home rensignée !"
    					objLogFile.WritelIne vbCrLf
    					CompteurHomeVide = CompteurHomeVide + 1
    				End If
    				If objTmp.homeDrive <> "H:" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a sa Home sur le lecteur " & objTmp.homeDrive & " !"
    					objLogFile.WritelIne vbCrLf
    					CompteurLecteur = CompteurLecteur + 1
    				End If
    			End If 
     
    		'Pour chaque objet OU trouvé
    		'Relance de la fonction récursive sur cet OU
    		ElseIf objTmp.Class = "organizationalUnit" Then
    			UsersHomeDirModIficationRecursive objRootOu
    		End If
    	Next
    End Sub
    Ca peut te mettre sur la voie?

    Bonne continuation.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    merci pour ta réponse rapide pitchalov.
    Cela me met en effet sur la voie.
    Mais si je pars sur ton idée de récursivité sur une OU ne contenant qu'une OU de test à l'intérieur pour tester l'arborescence il me met une erreur de mémoire :

    --> (60, 2) Erreur d'exécution Microsoft VBScript: Mémoire insuffisante

    Ligne correspondant à celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each objTmp In objRootOu
    D'ailleurs, je ne remarque pas de déclaration sur l'objTmp (?) Est-ce normal ?
    Je suis un peu embrouillé à force de bosser sur ce sujet ... Désolé.

    Merci et bonne journée.

  4. #4
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Du coup, si ça marche pas, j'ai testé le code.
    Etant donné que la partie à mettre en place est la récursivité, j'ai réduit le même code au simple parcours d'OU et listing des utilisateurs (pas de test/modification de HomeDir, pas de fichier de log, etc.)

    Voilà le code. Il fonctionne chez moi :
    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
    Set objParentOU = GetObject("LDAP://OU=Users & Groups,OU=Toulouse,DC=*")
     
    ListUsersInOU objParentOU
     
    Sub ListUsersInOU(objRootOu)
    	Dim objTmp
    	For Each objTmp In objRootOu
    		'Pour chaque objet User trouvé : affichage du nom de l'utilisateur
    		If objTmp.Class = "user" Then
    			WScript.Echo "User : " & objTmp.sAMAccountName
    		'Pour chaque objet OU trouvé : affichage du DN de l'OU
    		ElseIf objTmp.Class = "organizationalUnit" Then
    			WScript.Echo "OU : " & objTmp.distinguishedName
    			ListUsersInOU objTmp
    		End If
    	Next
    End Sub
    Ce code fonctionne-t-il pour toi aussi?

    Concernant la variable objTmp, elle n'était pas déclarée avant son utilisation dans le "For Each", mais cela n'est pas source d'erreur si l'option "Option Explicit" n'est pas imposée. En fait de cette manière la variable objTmp est affectée à chaque boucle.
    Dans ton script précédent, la variable objUser n'était pas non-plus déclarée.
    --> Dans ce cas, je l'ai renommé objTmp car on ne connait pas la nature de l'objet AD (d'ailleurs, on le test ensuite pour définir l'action à réaliser : User = action homedir; OU = nouvel appel de la fonction).

    Je réussis à éclaircir tes questionnements?

    Bonne continuation.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci encore

    pour la partie : Parcours des OU c'est OK mais modification de l'utilisateur dans l'OU en "dessous" NOK

    Ci-dessous mon code du coup

    VBS :
    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
    Dim objLogFile, fso
    ShareName = "share\Home"
    set objParent = GetObject("LDAP://OU=Test_Champ_profil,OU=Users,OU=DSI,OU=Services,OU=Users & Groups,OU=Toulouse,DC=*")
    strDrive = "H:"
    Compteur = 0
    CompteurLecteur = 0
    CompteurHomeVide = 0
    CompteurOK = 0
     
    'Déclaration Logfile
    'Ouverture du fichier Log Change_HomeDir_AD_Toulouse
    Set fso = CreateObject("ScriptIng.FileSystemObject")
    Set objLogFile = fso.OpenTextFile ("C:\Change_HomeDir_AD_Toulouse_" &day(now) & "_" &month(now) & "_" &year(now)&".log",2,true)
     
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbTab & "# Script started at " & Now & " #"
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbCrLf
     
    Set objParentOU = GetObject("LDAP://OU=Test_Champ_profil,OU=Users,OU=DSI,OU=Services,OU=Users & Groups,OU=Toulouse,DC=*)
    ListUsersInOU objParentOU
     
    Sub ListUsersInOU(objRootOu)
    	Dim objTmp
    	For Each objTmp In objRootOu
    		'Pour chaque objet User trouvé : affichage du nom de l'utilisateur
    		If objTmp.Class = "user" Then
    			If objTmp.HomeDirectory = "\\oldserver\home\%username%" and objTmp.homeDrive = "H:" then
    				objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & _
    				objTmp.Get("sAMAccountName")
    				objTmp.homeDrive = strDrive
    				objTmp.SetInfo
    				objLogFile.WritelIne  "- Champ HomeDirectory : " & objTmp.HomeDirectory & vbCrLf & vbTab & " montée sur le lecteur " & objTmp.homeDrive & " est appliquée sur l'utilisateur : " & objTmp.Get("sAMAccountName") & "."
    				objLogFile.WritelIne vbCrLf
    				Compteur = Compteur + 1
    			else
    				If objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & objTmp.Get("sAMAccountName") then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a déjà sa Home sur newserver !"
    					objLogFile.WritelIne vbCrLf
    					CompteurOK = CompteurOK + 1
    				End If
    				If objTmp.HomeDirectory = "" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " n'a pas de Home rensignée !"
    					objLogFile.WritelIne vbCrLf
    					CompteurHomeVide = CompteurHomeVide + 1
    				End If
    				If objTmp.homeDrive <> "H:" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a sa Home sur le lecteur " & objTmp.homeDrive & " !"
    					objLogFile.WritelIne vbCrLf
    					CompteurLecteur = CompteurLecteur + 1
    				End If
    			End If 
    			WScript.Echo "User : " & objTmp.sAMAccountName
    		'Pour chaque objet OU trouvé : affichage du DN de l'OU
    		ElseIf objTmp.Class = "organizationalUnit" Then
    			WScript.Echo "OU : " & objTmp.distinguishedName
    			ListUsersInOU objTmp
    		End If
    	Next
    End Sub
     
     
    'Fin et fermeture du fichier log
    Résultat fenêtre CMD :
    D:\Users\****\Desktop>cscript Change_HomeDir_AD_FINAL.vbs
    Microsoft (R) Windows Script Host Version 5.8
    Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

    User : cpso
    OU : OU=Test_champ,OU=Test_Champ_profil,OU=Users,OU=DSI,OU=Services,OU=Users & G
    roups,OU=Toulouse,DC=*
    User : test2013
    User : testcpso

    - Testcpso et cpso sont dans la même OU Test_Champ_profil
    - test2013 est dans l'OU Test_champ qui est dans l'OU Test_Champ_profil

    Par contre au niveau du fichier Log :
    - Champ HomeDirectory : l'utilisateur cpso n'a pas de Home renseignée !

    - Champ HomeDirectory : l'utilisateur cpso a sa Home sur le lecteur !

    - Champ HomeDirectory : l'utilisateur testcpso a déjà sa Home sur newserver !
    --> Nombre de modIfications sur l'OU de Toulouse : 0
    --> Nombre de personnes sur un autre lecteur que H: : 1
    --> Nombre de personnes n'ayant pas de lecteur Home : 1
    --> Nombre de personnes déjà connectées sur newserver : 1

    --> Aucune Trace du user "test2013".

    Et quand je regarde dans l'AD, l'user "test2013" n'a pas reçu la modification par le script, il a toujours son HomeDire :
    H: \\olserver\home\%username%
    et pas
    H: \\newserver\share\home\%username%

    Merci pour ton retour

  6. #6
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Bon si le parcours récursif est OK c'est déjà ça.
    Après si ton utilisateur n'a pas été modifié alors qu'il répond aux conditions, c'est que ton code qui teste les conditions n'est pas bon.

    Pour le vérifier ajoute cela dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WScript.Echo "User <" & objTmp.sAMAccountName & ">" &  _
    vbTab & "HomeDir <" & objTmp.HomeDirectory & ">" &  _
    vbTab & "HomeDrive <" & objTmp.HomeDrive & ">"
    ou même mieux, le mettre dans le fichier de log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If objTmp.Class = "user" Then
        objLogFile.WritelIne "User <" & objTmp.sAMAccountName & ">; HomeDir <" & objTmp.HomeDirectory & ">; HomeDrive <" & objTmp.HomeDrive & ">"
        ...
    Es-tu sûr que tes champs HomeDirectory contiennent bien la chaîne que tu testes --> "%username%?
    Si ce n'est pas le cas, il faut peut-être faire tes tests comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strUserName = objTmp.sAMAccountName
    If objTmp.HomeDirectory = "\\oldserver\home\" & strUserName Then ...
    D'autre part, attention à la casse : les tests que tu fais sont case sensitive.
    Il peut y avoir des différence de casse entre les champs HomeDir de tes différents utilisateurs?
    Dans ce cas un test de ce type serait plus conseillé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strUserName = objTmp.sAMAccountName
    If StrComp(objTmp.HomeDirectory, "\\oldserver\home\" & strUserName, vbText) = 0 Then ...
    Bonne continuation

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour ton retour.

    Je dois m'absenter mais en début d'après-midi, je teste avec tes conseils et je te fais un retour

    Merci bien et bon appétit.

    Edit. :

    Bon, j'ai testé et le fichier log est de nouveau différent :

    User <cpso>; HomeDir <\\oldserver\home\cpso>; HomeDrive <H:>
    User <test2013>; HomeDir <\\oldserver\home\test2013>; HomeDrive <H:>
    User <testcpso>; HomeDir <\\newserver\share\Home\testcpso>; HomeDrive <H:>
    - Champ HomeDirectory : l'utilisateur testcpso a déjà sa Home sur newserver !


    --> Nombre de modIfications sur l'OU de Toulouse : 0
    --> Nombre de personnes sur un autre lecteur que H: : 0
    --> Nombre de personnes n'ayant pas de lecteur Home : 0
    --> Nombre de personnes déjà connectées sur newserver : 1
    --> Du coup, je n'ai plus aucune modification lorsque le HomeDir de l'user est encore sur l'ancien serveur : oldserver.

    Nouveau Code qui parcourt toute l'arbo mais qui ne modifie pas les HomeDir :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    '#########################################################
    'Script .vbs pour modIfication des objets utilisateurs
    'Changement du champ Home Directory des utilisateurs
    'dans une OU précisée
    '
    'version 1.5
    'Author : *
    'Release : 16/05/2013
    '
    'Test sur l'OU des users de la DSI Toulouse
    '
    '#########################################################
     
    'Déclaration des variables prIncipales
    'ShareName --> Dossier de partage réseau
    'objParent --> OU où chercher les objets User, Array sur User
    'strDrive --> Lettre de montage du lecteur
    'Compteur --> Connaître le nombre de modification
     
    Dim objLogFile, fso
    ShareName = "share\Home"
    set objParent = GetObject("LDAP://OU=Test_Champ_profil,OU=Users,OU=DSI,OU=Services,OU=Users & Groups,OU=Toulouse,DC=*")
    strDrive = "H:"
    Compteur = 0
    CompteurLecteur = 0
    CompteurHomeVide = 0
    CompteurOK = 0
     
    'Déclaration Logfile
    'Ouverture du fichier Log Change_HomeDir_AD_Toulouse
    Set fso = CreateObject("ScriptIng.FileSystemObject")
    Set objLogFile = fso.OpenTextFile ("C:\Change_HomeDir_AD_Toulouse_" &day(now) & "_" &month(now) & "_" &year(now)&".log",2,true)
     
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbTab & "# Script started at " & Now & " #"
    objLogFile.WritelIne vbTab & "#########################################"
    objLogFile.WritelIne vbCrLf
     
    Set objParentOU = GetObject("LDAP://OU=Test_Champ_profil,OU=Users,OU=DSI,OU=Services,OU=Users & Groups,OU=Toulouse,DC=*")
    ListUsersInOU objParentOU
     
    Sub ListUsersInOU(objRootOu)
    	Dim objTmp
    	For Each objTmp In objRootOu
    		'Pour chaque objet User trouvé : affichage du nom de l'utilisateur
    		If objTmp.Class = "user" Then
    		'Test retour de variable
    		objLogFile.WritelIne "User <" & objTmp.sAMAccountName & ">; HomeDir <" & objTmp.HomeDirectory & ">; HomeDrive <" & objTmp.HomeDrive & ">"
    			If objTmp.HomeDirectory = "\\oldserver\home\%username%" and objTmp.homeDrive = "H:" then
    				objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & _
    				objTmp.Get("sAMAccountName")
    				objTmp.homeDrive = strDrive
    				objTmp.SetInfo
    				objLogFile.WritelIne  "- Champ HomeDirectory : " & objTmp.HomeDirectory & vbCrLf & vbTab & " montée sur le lecteur " & objTmp.homeDrive & " est appliquée sur l'utilisateur : " & objTmp.Get("sAMAccountName") & "."
    				objLogFile.WritelIne vbCrLf
    				Compteur = Compteur + 1
    			else
    				If objTmp.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & objTmp.Get("sAMAccountName") then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a déjà sa Home sur newserver !"
    					objLogFile.WritelIne vbCrLf
    					CompteurOK = CompteurOK + 1
    				End If
    				If objTmp.HomeDirectory = "" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " n'a pas de Home renseignée !"
    					objLogFile.WritelIne vbCrLf
    					CompteurHomeVide = CompteurHomeVide + 1
    				End If
    				If objTmp.homeDrive <> "H:" then
    					objLogFile.WritelIne  "- Champ HomeDirectory : l'utilisateur " & objTmp.Get("sAMAccountName") & " a sa Home sur le lecteur " & objTmp.homeDrive & " !"
    					objLogFile.WritelIne vbCrLf
    					CompteurLecteur = CompteurLecteur + 1
    				End If
    			End If 
    			WScript.Echo "User : " & objTmp.sAMAccountName
    		'Pour chaque objet OU trouvé : affichage du DN de l'OU
    		ElseIf objTmp.Class = "organizationalUnit" Then
    			WScript.Echo "OU : " & objTmp.distinguishedName
    			ListUsersInOU objTmp
    		End If
    	Next
    End Sub
     
     
    'Fin et fermeture du fichier log
    objLogFile.WritelIne vbTab & "--> Nombre de modIfications sur l'OU de Toulouse : " & Compteur
    objLogFile.WritelIne vbTab & "--> Nombre de personnes sur un autre lecteur que H: : " & CompteurLecteur
    objLogFile.WritelIne vbTab & "--> Nombre de personnes n'ayant pas de lecteur Home : " & CompteurHomeVide
    objLogFile.WritelIne vbTab & "--> Nombre de personnes déjà connectées sur newserver : " & CompteurOK
    objLogFile.WritelIne vbCrLf
    objLogFile.WritelIne vbTab & "#######################################"
    objLogFile.WritelIne vbTab & "# Script Ended at " & Now & " #"
    objLogFile.WritelIne vbTab & "#######################################"
    objLogFile.close
     
    'Cleanup des objets
    Set fso = NothIng
    Set objLogFile = NothIng
     
    'Sortie du script
    WScript.Quit()


    .VBS qui change bien le HomeDir mais qui ne parcourt pas toute l'arbo :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    '#########################################################
    'Script .vbs pour modification des objets utilisateurs
    'Changement du champ Home Directory des utilisateurs
    'dans une OU précisée
    '
    'version 1.3
    'Author : *
    'Release : 29/04/2013
    '
    'Test sur l'OU des users de la DSI Toulouse
    '
    '#########################################################
     
    'Déclaration des variables principales
    'ShareName --> Dossier de partage réseau
    'objParent --> OU où chercher les objets User, Array sur User
    'strDrive --> Lettre de montage du lecteur
    'Compteur --> Connaître le nombre de modification
     
    Dim objLogFile, fso
    ShareName = "share\Home"
    set objParent = GetObject("LDAP://OU=Users,OU=DSI,OU=Services,OU=Users & Groups,OU=Toulouse,DC=*")
    objParent.Filter = Array("user")
    strDrive = "H:"
    Compteur = 0
    CompteurLecteur = 0
    CompteurHomeVide = 0
    CompteurOK = 0
     
    'Déclaration Logfile
    'Ouverture du fichier Log Change_HomeDir_AD_Toulouse
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objLogFile = fso.OpenTextFile ("C:\Change_HomeDir_AD_Toulouse_" &day(now) & "_" &month(now) & "_" &year(now)&".log",2,true)
     
    objLogFile.Writeline vbTab & "#########################################"
    objLogFile.Writeline vbTab & "# Script started at " & Now & " #"
    objLogFile.Writeline vbTab & "#########################################"
    objLogFile.Writeline vbCrLf
     
    'Pour chaque objet User trouvé
    'Changement du champ HomeDir de l'utilisateur
    'Si le HomeDir est sur oldserver
    for each objUser in objParent
    	if objUser.HomeDirectory = "\\oldserver\home\%username%" and objUser.homeDrive = "H:" then
    		objUser.HomeDirectory = "\\newserver" & "\" & ShareName & "\" & _
    		objUser.Get("sAMAccountName")
    		objUser.homeDrive = strDrive
    		objUser.SetInfo
    		objLogFile.Writeline  "- Champ HomeDirectory : " & objUser.HomeDirectory & vbCrLf & vbTab & " montée sur le lecteur " & objUser.homeDrive & " est appliquée sur l'utilisateur : " & objUser.Get("sAMAccountName") & "."
    		objLogFile.Writeline vbCrLf
    		Compteur = Compteur + 1
    	else
    		if objUser.HomeDirectory = "\\bigsht.corp.capgemini.com" & "\" & ShareName & "\" & objUser.Get("sAMAccountName") then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " a déjà sa Home sur newserver !"
    			objLogFile.Writeline vbCrLf
    			CompteurOK = CompteurOK + 1
    		end if
    		if objUser.HomeDirectory = "" then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " n'a pas de Home rensignée !"
    			objLogFile.Writeline vbCrLf
    			CompteurHomeVide = CompteurHomeVide + 1
    		end if
    		if objUser.homeDrive <> "H:" then
    			objLogFile.Writeline  "- Champ HomeDirectory : l'utilisateur " & objUser.Get("sAMAccountName") & " a sa Home sur le lecteur " & objUser.homeDrive & " !"
    			objLogFile.Writeline vbCrLf
    			CompteurLecteur = CompteurLecteur + 1
    		end if
    	end if
    next
     
     
    'Fin et fermeture du fichier log
    objLogFile.Writeline vbTab & "--> Nombre de modifications sur l'OU de Toulouse : " & Compteur
    objLogFile.Writeline vbTab & "--> Nombre de personnes sur un autre lecteur que H: : " & CompteurLecteur
    objLogFile.Writeline vbTab & "--> Nombre de personnes n'ayant pas de lecteur Home : " & CompteurHomeVide
    objLogFile.Writeline vbTab & "--> Nombre de personnes déjà connectées sur newserver : " & CompteurOK
    objLogFile.Writeline vbCrLf
    objLogFile.Writeline vbTab & "#######################################"
    objLogFile.Writeline vbTab & "# Script ended at " & Now & " #"
    objLogFile.Writeline vbTab & "#######################################"
    objLogFile.close
     
    'Cleanup des objets
    Set fso = Nothing
    Set objLogFile = Nothing
     
    'Sortie du script
    WScript.Quit()
    Cela m'aide aussi de ré-indiquer ce que je fais, mais je trouve cela plus clair, j'espère que cela ne dérange pas :/
    Je sens que je suis pas loin.... RRRrrRRR.
    il doit juste y avoir une petite erreur.

    Merci vraiment pour ton implication et ton aide

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    C'est bon

    Vraiment merci beaucoup ! J'ai appliqué ton dernier conseil et de tester en comparant avec l'username :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If StrComp(objTmp.HomeDirectory, "\\oldserver\home\" & strUserName, vbText) = 0 and objTmp.homeDrive = "H:" then
    Et du coup dans les logs :

    User <cpso>; HomeDir <\\oldserver\home\cpso>; HomeDrive <H:>
    - Champ HomeDirectory : \\newserver\share\Home\cpso
    montée sur le lecteur H: est appliquée sur l'utilisateur : cpso.


    User <test2013>; HomeDir <\\oldserver\home\test2013>; HomeDrive <H:>
    - Champ HomeDirectory : \\newserver\share\Home\test2013
    montée sur le lecteur H: est appliquée sur l'utilisateur : test2013.


    User <testcpso>; HomeDir <\\newserver\share\Home\testcpso>; HomeDrive <H:>
    - Champ HomeDirectory : l'utilisateur testcpso a déjà sa Home sur newserver !


    --> Nombre de modIfications sur l'OU de Toulouse : 2
    --> Nombre de personnes sur un autre lecteur que H: : 0
    --> Nombre de personnes n'ayant pas de lecteur Home : 0
    --> Nombre de personnes déjà connectées sur newserver : 1
    Après vérification sur l'AD, tout est OK sur les deux OU dans mon OU

    Merci beaucoup pitchalov.

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

Discussions similaires

  1. [VBS] Modification utilisateur Active Directory
    Par Marin d'Eau Douce dans le forum VBScript
    Réponses: 0
    Dernier message: 05/10/2010, 10h52
  2. Récupérer nom d'utilisateur Active Directory
    Par nasbe26 dans le forum Windows
    Réponses: 3
    Dernier message: 06/09/2007, 14h57
  3. Réponses: 15
    Dernier message: 22/03/2007, 16h48
  4. Compte utilisateur Active Directory
    Par dim971 dans le forum C#
    Réponses: 9
    Dernier message: 11/02/2007, 19h37
  5. [VBS][Débutant] modification dans Active Directory
    Par _alex_ dans le forum VBScript
    Réponses: 1
    Dernier message: 12/05/2006, 22h52

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