Lister objets AD du domaine
Le
magnum42

Bonjour,
Je cherche à lister tout simplement les groupes du domaine.
J'ai fait un petit script un peu plus pratique qui liste, suivant les
paramètres, les groupes, les ordinateurs, ou les users. Et même les users de
chaque groupe (pour un besoin ponctuel).
Le problème est que je viens de remarquer que certains groupes manquent dans
ma liste. Ce sont des groupes globaux de distribution.
J'ai donc l'impression que les groupes globaux de sécurité sont bien vus,
mais pas les groupes globaux de distribution.
Et là, je ne vois pas comment faire J'ai besoin de ces groupes dans ma
liste.
Est-ce parce-que je passe par "WinNT://" et non par LDAP (je trouve cela
beaucoup plus pratique, pas besoin de spécifier une OU et j'ai l'habitude de
faire comme ca).
Voici mon script :
Option Explicit
'Const cDom = "KRJ.GIE"
Dim oDom,oObj,oExcel,oSheet,oArgs,oArg,oNetwork
Dim oUser,oGroup
Dim nb_lin,tDomain
Dim bExport_to_Excel
Dim bUsers,bGroups,bComputers
bExport_to_Excel = True
bUsers = False
bGroups = False
bComputers = False
Set oNetwork = CreateObject("WScript.Network")
Set oArgs = WScript.Arguments
tDomain = oNetwork.UserDomain
wscript.echo tDomain
If(oArgs.Count<>0) Then
For each oArg in oArgs
Select Case UCase(oArg)
Case "/NOEXCEL" wscript.echo "OK, I promise, I won't user Excel :-("
bExport_to_Excel = False
Case "/GROUPS" wscript.echo "Listing groups"
bGroups = True
Case "/USERS" wscript.echo "Listing users"
bUsers = True
Case "/COMPUTERS" wscript.echo "Listing computers"
bComputers = True
Case Else wscript.echo "Ouch, bad argument !"
wscript.echo "Possible arguments : /noexcel /groups /users"
wscript.quit 0
End Select
Next
Else
wscript.echo "Possible arguments : /noexcel /groups /users /computers"
wscript.quit 0
End If
nb_lin = 1
Set oDom = GetObject("WinNT://" & tDomain & ",Domain")
'oDom.Filter = Array("User")
If(bExport_to_Excel) Then
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkbook.Worksheets(1)
oSheet.Name = tDomain & "Domain Users"
End If
For Each oObj in oDom
wscript.echo ""&oObj.Name
If(oObj.Class = "User") And bUsers Then
wscript.echo oObj.Class & vbtab & oObj.Name & vbtab & oObj.FullName
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
oSheet.Cells(nb_lin,3).Value = oObj.FullName
nb_lin = nb_lin+1
End If
End If
If(oObj.Class = "Group") And bGroups Then
wscript.echo oObj.Class & vbtab & oObj.Name
'Si on doit également lister les membres de chaque groupe du domaine :
'Problème : le filtrage sur .Class ne fonctionne pas et renvoie également
les computers membres :-(
On Error Resume Next
For each oUser in oObj.Members
If(oUser.Class = "User") Then
wscript.echo vbtab & vbtab & "Membre du groupe " & Chr(34) & oObj.Name &
Chr(34) & " :" & vbtab & oUser.Name & vbtab & oUser.FullName & vbtab &
oUser.Class
End If
Next
On Error GoTo 0
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
nb_lin = nb_lin+1
End If
End If
If(oObj.Class = "Computer") And bComputers Then
wscript.echo oObj.Class & vbtab & oObj.Name
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
nb_lin = nb_lin+1
End If
End If
If((oObj.Class <> "Group") and (oObj.Class <> "User") And (oObj.Class <>
"Computer") And (oObj.Class <> "Schema")) Then
wscript.echo oObj.Class & vbtab & oObj.Name & vbtab & "!!!"
wscript.echo oObj.Name & vbtab & "!!!"
'MsgBox oObj.Class & vbtab & oObj.Name
End If
Next
If(bExport_to_Excel) Then
oExcel.ActiveWorkbook.SaveAs ScriptPath() & WScript.ScriptName & "_" &
tDomain & ".xls"
oExcel.ActiveWorkbook.Close
oExcel.Quit()
Set oExcel = Nothing
End If
Function ScriptPath()
ScriptPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) -
Len(WScript.ScriptName))
End Function
Merci d'avance,
--
Franck
http://supermarches.faire-le-bon-choix.fr
Je cherche à lister tout simplement les groupes du domaine.
J'ai fait un petit script un peu plus pratique qui liste, suivant les
paramètres, les groupes, les ordinateurs, ou les users. Et même les users de
chaque groupe (pour un besoin ponctuel).
Le problème est que je viens de remarquer que certains groupes manquent dans
ma liste. Ce sont des groupes globaux de distribution.
J'ai donc l'impression que les groupes globaux de sécurité sont bien vus,
mais pas les groupes globaux de distribution.
Et là, je ne vois pas comment faire J'ai besoin de ces groupes dans ma
liste.
Est-ce parce-que je passe par "WinNT://" et non par LDAP (je trouve cela
beaucoup plus pratique, pas besoin de spécifier une OU et j'ai l'habitude de
faire comme ca).
Voici mon script :
Option Explicit
'Const cDom = "KRJ.GIE"
Dim oDom,oObj,oExcel,oSheet,oArgs,oArg,oNetwork
Dim oUser,oGroup
Dim nb_lin,tDomain
Dim bExport_to_Excel
Dim bUsers,bGroups,bComputers
bExport_to_Excel = True
bUsers = False
bGroups = False
bComputers = False
Set oNetwork = CreateObject("WScript.Network")
Set oArgs = WScript.Arguments
tDomain = oNetwork.UserDomain
wscript.echo tDomain
If(oArgs.Count<>0) Then
For each oArg in oArgs
Select Case UCase(oArg)
Case "/NOEXCEL" wscript.echo "OK, I promise, I won't user Excel :-("
bExport_to_Excel = False
Case "/GROUPS" wscript.echo "Listing groups"
bGroups = True
Case "/USERS" wscript.echo "Listing users"
bUsers = True
Case "/COMPUTERS" wscript.echo "Listing computers"
bComputers = True
Case Else wscript.echo "Ouch, bad argument !"
wscript.echo "Possible arguments : /noexcel /groups /users"
wscript.quit 0
End Select
Next
Else
wscript.echo "Possible arguments : /noexcel /groups /users /computers"
wscript.quit 0
End If
nb_lin = 1
Set oDom = GetObject("WinNT://" & tDomain & ",Domain")
'oDom.Filter = Array("User")
If(bExport_to_Excel) Then
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkbook.Worksheets(1)
oSheet.Name = tDomain & "Domain Users"
End If
For Each oObj in oDom
wscript.echo ""&oObj.Name
If(oObj.Class = "User") And bUsers Then
wscript.echo oObj.Class & vbtab & oObj.Name & vbtab & oObj.FullName
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
oSheet.Cells(nb_lin,3).Value = oObj.FullName
nb_lin = nb_lin+1
End If
End If
If(oObj.Class = "Group") And bGroups Then
wscript.echo oObj.Class & vbtab & oObj.Name
'Si on doit également lister les membres de chaque groupe du domaine :
'Problème : le filtrage sur .Class ne fonctionne pas et renvoie également
les computers membres :-(
On Error Resume Next
For each oUser in oObj.Members
If(oUser.Class = "User") Then
wscript.echo vbtab & vbtab & "Membre du groupe " & Chr(34) & oObj.Name &
Chr(34) & " :" & vbtab & oUser.Name & vbtab & oUser.FullName & vbtab &
oUser.Class
End If
Next
On Error GoTo 0
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
nb_lin = nb_lin+1
End If
End If
If(oObj.Class = "Computer") And bComputers Then
wscript.echo oObj.Class & vbtab & oObj.Name
If(bExport_to_Excel) Then
oSheet.Cells(nb_lin,1).Value = oObj.Class
oSheet.Cells(nb_lin,2).Value = oObj.Name
nb_lin = nb_lin+1
End If
End If
If((oObj.Class <> "Group") and (oObj.Class <> "User") And (oObj.Class <>
"Computer") And (oObj.Class <> "Schema")) Then
wscript.echo oObj.Class & vbtab & oObj.Name & vbtab & "!!!"
wscript.echo oObj.Name & vbtab & "!!!"
'MsgBox oObj.Class & vbtab & oObj.Name
End If
Next
If(bExport_to_Excel) Then
oExcel.ActiveWorkbook.SaveAs ScriptPath() & WScript.ScriptName & "_" &
tDomain & ".xls"
oExcel.ActiveWorkbook.Close
oExcel.Quit()
Set oExcel = Nothing
End If
Function ScriptPath()
ScriptPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) -
Len(WScript.ScriptName))
End Function
Merci d'avance,
--
Franck
http://supermarches.faire-le-bon-choix.fr
En effet, l'interface ADSI WinNT ne permet pas d'exploiter tous les objets
présents à partir de Windows 2000, seul LDAP le peut.
Si vous ne souhaitez spécifier d'OU, vous pouvez utiliser le distinguished
name du domain et utiliser la profondeur de recherche "Subtree".
--
Marc Lognoul [MCSE, MCTS, MVP]
Heureux celui qui a pu pénétrer les causes secrètes des choses
Happy is the one who could enter the secret causes of things
Blog EN: http://www.marc-antho-etc.net/blog/
Blog FR: http://www.marc-antho-etc.net/blogfr/
"magnum42" news:
Merci pour l'info.
J'ai recodé le script en passant par du LDAP et ca fonctionne bien.
--
Franck
http://supermarches.faire-le-bon-choix.fr
"Marc Lognoul [MVP]" wrote: