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
| Const ADS_UF_ACCOUNTDISABLE = 2
Function ObjSidToStrSid(arrSid)
' Function to convert OctetString (byte array) to Decimal string (SDDL)
Dim strHex, strDec
strHex = OctetStrToHexStr(arrSid)
strDec = HexStrToDecStr(strHex)
ObjSidToStrSid = strDec
End Function ' ObjSidToStrSid
Function OctetStrToHexStr(arrbytOctet)
' Function to convert OctetString (byte array) to Hex string.
Dim k
OctetStrToHexStr = ""
For k = 1 To Lenb(arrbytOctet)
OctetStrToHexStr = OctetStrToHexStr _
& Right("0" & Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)
Next
End Function ' OctetStrToHexStr
Function HexStrToDecStr(strSid)
Const BYTES_IN_32BITS = 4
Const SRL_BYTE = 0
Const IAV_START_BYTE = 2
Const IAV_END_BYTE = 7
Const RID_START_BYTE = 8
Const MSB = 3 'Most significant byte
Const LSB = 0 'Least significant byte
Dim arrbytSid, lngTemp, base, offset, i
ReDim arrbytSid(Len(strSid)/2 - 1)
' Convert hex string into integer array
For i = 0 To UBound(arrbytSid)
arrbytSid(i) = Cint("&H" & Mid(strSid, 2 * i + 1, 2))
Next
' Add SRL number
HexStrToDecStr = "S-" & arrbytSid(SRL_BYTE)
' Add Identifier Authority Value
lngTemp = 0
For i = IAV_START_BYTE To IAV_END_BYTE
lngTemp = lngTemp * 256 + arrbytSid(i)
Next
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
For base = RID_START_BYTE To UBound(arrbytSid) Step BYTES_IN_32BITS
lngTemp = 0
For offset = MSB to LSB Step -1
lngTemp = lngTemp * 256 + arrbytSid(base + offset)
Next
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
Next
End Function ' HexStrToDecStr
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("liste_users_in_groups.txt", ForAppending, True)
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 100000
objCommand.CommandText = "<LDAP://CN=nom_groupe,OU=nom_ou,OU=Groups,dc=cns,dc=concrete,dc=int>;(objectCategory=User)" & _
";givenName,sn,userprincipalname,objectSid,distinguishedName,sAMAccountName,userAccountControl;subtree"
WScript.Echo "avant la boucle"
Set objRecordSet = objCommand.Execute
intCounter = 0
Do Until objRecordset.EOF
WScript.Echo "dans la boucle"
usergn=objRecordset.Fields("givenName")
userna=objRecordset.Fields("sn")
usermail=objRecordset.Fields("userprincipalname")
userdn=objRecordset.Fields("distinguishedName")
useracc=objRecordset.Fields("sAMAccountName")
intUAC=objRecordset.Fields("userAccountControl")
If InStr(userdn,",OU=nom_ou")>InStr(userdn,",OU=") then
If intUAC AND ADS_UF_ACCOUNTDISABLE Then
else
usersite=Mid(userdn,InStr(userdn,",OU=")+4,InStr(userdn,",OU=nom_ou")-(4+InStr(userdn,",OU=")))
end if
intCounter = intCounter + 1
'on ecrit les noms dans le fichier txt
objTextFile.WriteLine( usersite&";"&usergn&";"&userna&";"&usermail)
end if
objRecordset.MoveNext
Loop
WScript.Echo "apres la boucle"
WScript.Echo VbCrLf & intCounter & " ont été listé"
objTextFile.Close
objConnection.Close |
Partager