Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lister objets AD du domaine

2 réponses
Avatar
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

2 réponses

Avatar
Marc Lognoul [MVP]
Bonjour,

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" wrote in message
news:
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
Avatar
magnum42
Bonjour,

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:

Bonjour,

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" wrote in message
news:
> 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