Précédent   Forum des professionnels en informatique > Systèmes > Windows > Windows Serveur
Windows Serveur Forum d'entraide professionel pour Windows Serveur : NT, 2000, 2003 , Longhorn...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/07/2011, 10h41   #1
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 18
Points : 4
Points : 4
Par défaut Mise à jour de l'AD

Bonjour,

je suis entrain de mettre à jour l'AD de mon entreprise. Je suis un peu perdu en faite, c'est la première fois que je m'occupe d'un AD (plus l'habitude du réseau). J'ai le programme (.bat):

Code :
1
2
3
4
5
6
for /f "delims =/"%%a ($test2.csv)
do
{
   dsquery dsmod -username %%a, -title %%c, -department %%d, -company %%e,
   -office %%f , -tel %%g, -mobile %%h, -faxe %%i, -mail %%j
}
Ma première question: le mieux serait de le laisser en bat ou de le mettre en shell (la je ne sais pas comment l’écrire). On m'a parlé de Powershell. Mais la je ne connais pas non plus

Deuxième question: Je lance le .bat de mon pc et rien ne se passe. Peut être que c'est du à l'AD qui se trouve sur un autre pc (je me connecte à distance )

Merci par avance
Reiji
Reiji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h21   #2
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Bonjour,

Je te conseil d'utiliser le VBS!
Voici un exemple de script complet :
Code :
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
' Script de récupération des comptes désactivés
' Utilise la propriété AccountDisabled
' Renvoie le last login ou Never si jamais connecté

Const ForAppending = 8

Domain="monDomaine"
strDC ="monDC"

On Error Resume Next

date2 = Replace(Date, "/", "-")
'wscript.echo date2
Result_file = "C:/UserExpired-disabled-all-" & date2 & ".csv"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(Result_file)
objFile.close
Set objTextFile = objFSO.OpenTextFile(Result_file, ForAppending, True)

Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 400
objExplorer.Height = 600
objExplorer.Left = 0
objExplorer.Top = 0
objExplorer.Visible = 1

Do While (objExplorer.Busy)
Loop

Set objDocument = objExplorer.Document
objDocument.Open
objDocument.Writeln "<html><head><title>Titre</title></head>"
objDocument.Writeln "<body bgcolor='white'>"
objDocument.Writeln "Audit des logins.<br>Veuillez patienter. <p>"

Set oDomain = GetObject("WinNT://" & Domain)
oDomain.Filter = Array("User")
objDocument.Writeln "Derniere connexion des comptes au domaine " & oDomain.Name & "<br>"
objTextFile.write "Login;Nom;Direction;DN;Désactivé;Commentaire;Dernier Login;Nombre de jours" & vbCRLF

Set oRootDSE = GetObject("LDAP://RootDSE")
Set oShell = WScript.CreateObject("WScript.Shell")

For Each oDItem In oDomain
	'wscript.echo oDItem.name
	Err.Clear
        sUserName = oDItem.name
        Set oUser = GetObject("LDAP://" & GetoUser(sUserName))
        DNUser = oUser.distinguishedName
        'On ignore les comptes pour Citrix
        'if lcase(instr(1, DNUser, "Architecture Citrix", 1)) = 0 then
                if oUser.AccountDisabled = TRUE then
                        Set objLastLogon = oUser.Get("lastLogonTimestamp")
                        intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
                        intLastLogonTime = intLastLogonTime / (60 * 10000000)
                        intLastLogonTime = intLastLogonTime / 1440
                        'Wscript.Echo "User: " & sUserName & " Last logon time: " & intLastLogonTime + #1/1/1601#
                        If Err.Number = 0 Then
	                       realLastLogonTime = intLastLogonTime + #1/1/1601#
	                       LastLogonDate = Split(realLastLogonTime)
	                       'Wscript.Echo "Date : " & LastLogonDate(0)
	                       DaysValue = DateDiff("d", LastLogonDate(0), Date)
	                       OUDirect = split(DNUser, ",", -1, 1)
	                       Direction = split(OUDirect(1), "=", -1, 1)
                                'Wscript.Echo "Jours : " & DaysValue
	                       objTextFile.write sUserName & ";" & oUser.CN & ";" & Direction(1) & ";" & oUser.distinguishedName & ";" & oUser.AccountDisabled & ";" & oUser.description & ";" & realLastLogonTime & ";" & DaysValue & vbCRLF
                        Else
                               objTextFile.write sUserName & ";" & oUser.CN & ";" & Direction(1) & ";" & oUser.distinguishedName & ";" & oUser.AccountDisabled & ";" & oUser.description & ";Never;Never" & vbCRLF
                        End If
                End If
        'End If
        objDocument.Writeln sUserName & " audité" & "<br>"
Next
objTextFile.close
liste.close

'############################################################
' Fonction GetoUser

Function GetoUser(ByVal LogonAccount)
Const ADS_PROPERTY_CLEAR = 1
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
' Determine le nom DNS du domain depuis l'objet RootDSE.
strDNSDomain = oRootDSE.Get("defaultNamingContext")

' utilise l'objet NameTranslate pour trouver le nom netbios du domaine depuis le nom dns
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
' suprime le dernier antislash
strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
  strUserNTName = Trim(LogonAccount)
  ' utilise l'objet NameTranslate pour convertire le nom NT en Chaine LDAP.
  'On Error Resume Next
  objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strUserNTName
  If Err.Number <> 0 Then
    On Error GoTo 0
    Wscript.Echo "ERROR: Login not found in Active Directory: " & strUserNTName
  Else
  On Error GoTo 0

  strUserDN = objTrans.Get(ADS_NAME_TYPE_1779)

    'On Error Resume Next
    GetoUser = strUserDN
  End If
End Function
'#################################################################
Il s'agit d'un exemple, il faudra bien sur l'adapter à ton besoin.
Cherche un peu sur google ou sur DVP, tu trouvera beacoup d'aide pour ce qui est des scripts VBS.
Bon courage.
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/07/2011, 14h35   #3
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 18
Points : 4
Points : 4
Salut ludojojo,

J'avais déjà tester avec du VB, mais c'était du vb.net. J'avais utiliser ce programme:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Module Module1

    Sub main()
        Dim Ldap As DirectoryEntry = New DirectoryEntry("LDAP://nom de l'AD", "login", "mdp") 
        Dim searcher As DirectorySearcher = New DirectorySearcher((Ldap))
        searcher.Filter = ""
        For Each result As SearchResult In searcher.FindAll
            Dim DirEntry As DirectoryEntry = result.GetDirectoryEntry()
            DirEntry.Properties("Fonction").Value = ""  
            DirEntry.Properties("Service").Value = ""
            DirEntry.Properties("Société").Value = ""
            DirEntry.Properties("Téléphone").Value = ""
            DirEntry.Properties("Portable").Value = ""
            DirEntry.Properties("Fax").Value = ""
            DirEntry.Properties("Mail").Value = ""
            DirEntry.CommitChanges() 
        Next
    End Sub
End Module
le probleme c'est que cela ne fonctionner pas. Après je suis parti sur de BASH (voir le programme plus haut) mais pour le vbs la je ne connais pas du tout.
Ton programme c'est bien pour recuperer un compt AD. Est ce que le programme VB.net ressemble un peu au programme VBs?
Reiji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 18h40   #4
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Ton code VB.net n'à pas l'air mal, qu'est ce qui ne fonctionne pas?

Attention tout de même, le filter est important :
Citation:
searcher.Filter = ""
Mieu vaut mettre quelque chose de la forme :
Code :
searcher.Filter = "(&(objectClass=user)(mail=*))"
Cela te permettra de limiter les erreur et de réduire ton champs de recherche.

Je ne m'y connais pas bien en VB, en revanche si tu veux le faire en C#, je peut t'aider à faire ton bout de code. Le tout étant encore de savoir ce que tu cherches à faire exactement.

Voici tout de même un petit exemple en VB.NET :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim adUserList As New List(Of String)()
Try
	Dim ldap As New DirectoryEntry("LdapUrl", "LdapLogin", "LdapPwd")
	Dim searcher As New DirectorySearcher(ldap)
	searcher.Filter = "(&(objectClass=user)(mail=*))"
	searcher.PropertiesToLoad.Add("cn")
	Dim AdUsers As SearchResultCollection = searcher.FindAll()
	For Each result As SearchResult In AdUsers
		For Each currentName As String In result.Properties.PropertyNames
			For Each currentValue As String In result.Properties(currentName)
				If Not currentValue.Contains("LDAP://") Then
					adUserList.Add(currentValue)
				End If
			Next
		Next
	Next
	adUserList.Sort()
Catch ex As Exception
	adUserList.Add("Impossible d'exécuter la requête")
End Try
Return adUserList.ToArray()
Ce code te permet de lister tous les utilisateurs de ton AD qui on un email non vide. (Avec un tri à la fin)
J'espère que cela t'aidera.
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 11h32   #5
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 18
Points : 4
Points : 4
Viens de voir ta réponse à l'instant. Ton C# m'a bien aider ludojojo.

Je te remercie
Reiji est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h12.


 
 
 
 
Partenaires

Hébergement Web