On Error Resume Next strFileName = "Users-Groups-SIDs.xlsx" Set objShell = CreateObject("Wscript.Shell") strPath = Wscript.ScriptFullName Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strPath) strFolder = objFSO.GetParentFolderName(objFile) SET objExcelApp = CREATEOBJECT("Excel.Application") SET objWB = objExcelApp.Workbooks.Add SET objExcel = objWB.Worksheets(1) objWB.SaveAs(strFolder & "\" & strFileName) Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 'Set the path of the file to the same folder of the script 'Open the file and make the workbook visible Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(strFolder & "\" & strFileName) objExcel.Visible = True 'objExcel.Cells(1, 1).Value = "Name" 'objExcel.Cells(1, 1).Font.Bold = TRUE 'objExcel.Columns(1).ColumnWidth = 40 'objExcel.Cells(1, 2).Value = "Security ID" 'objExcel.Cells(1, 2).Font.Bold = TRUE 'objExcel.Columns(2).ColumnWidth = 60 'Starting row of the Excel is 2, since first row are column headings y = 2 objCommand.CommandText = _ "SELECT * FROM 'LDAP://DC=mvi,DC=srv' WHERE objectCategory='user'" Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF strADsPathUser = objRecordSet.Fields("ADsPath").Value 'wScript.echo strADsPathUser Set objUser = GetObject(strADsPathUser) z = 1 objExcel.Cells(y,z) = objUser.sn objExcel.Cells(1, z).Value = "sn" 'Wscript.Echo objUser.sn objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.givenName objExcel.Cells(1, z).Value = "givenName" 'Wscript.Echo objUser.givenName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.initials objExcel.Cells(1, z).Value = "initials" 'Wscript.Echo objUser.initials objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.description objExcel.Cells(1, z).Value = "description" objExcel.Cells(1, z).Font.Bold = TRUE 'Wscript.Echo objUser.description z = z + 1 objExcel.Cells(y,z) = objUser.codePage objExcel.Cells(1, z).Value = "codePage" objExcel.Cells(1, z).Font.Bold = TRUE 'Wscript.Echo objUser.codePage z = z + 1 objExcel.Cells(y,z) = objUser.sAMAccountName objExcel.Cells(1, z).Value = "sAMAccountName" 'Wscript.Echo objUser.sAMAccountName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.codePage objExcel.Cells(1, z).Value = "codePage" objExcel.Cells(1, z).Font.Bold = TRUE 'Wscript.Echo objUser.codePage z = z + 1 objExcel.Cells(y,z) = objUser.mail objExcel.Cells(1, z).Value = "mail" 'Wscript.Echo objUser.mail objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 intUserSID = fnGet_HexString(objUser.ObjectSID) objExcel.Cells(y,z) = intUserSID objExcel.Cells(1, z).Value = "ObjectSID" 'Wscript.Echo objUser.ObjectSID objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.userPrincipalName objExcel.Cells(1, z).Value = "userPrincipalName" 'Wscript.Echo objUser.userPrincipalName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.displayName objExcel.Cells(1, z).Value = "displayName" 'Wscript.Echo objUser.displayName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.distinguishedName objExcel.Cells(1, z).Value = "distinguishedName" 'Wscript.Echo objUser.distinguishedName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 intUserSID = stringlist(objUser.memberOf) objExcel.Cells(y,z) = intUserSID objExcel.Cells(1, z).Value = "memberOf" 'Wscript.Echo objUser.memberOf objExcel.Cells(1, z).Font.Bold = TRUE ' z = z + 1 objExcel.Cells(y,z) = objUser.physicalDeliveryOfficeName objExcel.Cells(1, z).Value = "physicalDeliveryOfficeName" 'Wscript.Echo objUser.physicalDeliveryOfficeName objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.telephoneNumber objExcel.Cells(1, z).Value = "telephoneNumber" 'Wscript.Echo objUser.telephoneNumber objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.profilePath objExcel.Cells(1, z).Value = "profilePath" 'Wscript.Echo objUser.profilePath objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.scriptPath objExcel.Cells(1, z).Value = "scriptPath" 'Wscript.Echo objUser.scriptPath objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.homeDirectory objExcel.Cells(1, z).Value = "homeDirectory" 'Wscript.Echo objUser.homeDirectory objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.homeDrive objExcel.Cells(1, z).Value = "homeDrive" 'Wscript.Echo objUser.homeDrive objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.title objExcel.Cells(1, z).Value = "title" 'Wscript.Echo objUser.title objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.department objExcel.Cells(1, z).Value = "department" 'Wscript.Echo objUser.department objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.company objExcel.Cells(1, z).Value = "company" 'Wscript.Echo objUser.company objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.manager objExcel.Cells(1, z).Value = "manager" 'Wscript.Echo objUser.manager objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.homePhone objExcel.Cells(1, z).Value = "homePhone" 'Wscript.Echo objUser.homePhone objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.pager objExcel.Cells(1, z).Value = "pager" 'Wscript.Echo objUser.pager objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.mobile objExcel.Cells(1, z).Value = "mobile" 'Wscript.Echo objUser.mobile objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.facsimileTelephoneNumber objExcel.Cells(1, z).Value = "facsimileTelephoneNumber" 'Wscript.Echo objUser.facsimileTelephoneNumber objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.ipphone objExcel.Cells(1, z).Value = "ipphone" 'Wscript.Echo objUser.ipphone objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.info objExcel.Cells(1, z).Value = "info" 'Wscript.Echo objUser.info objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.streetAddress objExcel.Cells(1, z).Value = "streetAddress" 'Wscript.Echo objUser.streetAddress objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.postOfficeBox objExcel.Cells(1, z).Value = "postOfficeBox" 'Wscript.Echo objUser.postOfficeBox objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.l objExcel.Cells(1, z).Value = "l" 'Wscript.Echo objUser.l objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.st objExcel.Cells(1, z).Value = "st" 'Wscript.Echo objUser.st objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.c objExcel.Cells(1, z).Value = "c" 'Wscript.Echo objUser.c objExcel.Cells(1, z).Font.Bold = TRUE z = z + 1 objExcel.Cells(y,z) = objUser.wWWHomePage objExcel.Cells(1, z).Value = "wWWHomePage" 'Wscript.Echo objUser.wWWHomePage objExcel.Cells(1, z).Font.Bold = TRUE ''''''''''''''''''''''''''' y = y + 1 objRecordSet.MoveNext Loop objCommand.CommandText = _ "SELECT * FROM 'LDAP://DC=mvi,DC=srv' WHERE objectCategory='group'" Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF strADsPathGroup = objRecordSet.Fields("ADsPath").Value 'wScript.echo strADsPathGroup Set objGroup = GetObject(strADsPathGroup) 'if objGroup.groupType = "-2147483646" then objExcel.Cells(y,1) = objGroup.sAMAccountName 'Wscript.Echo objUser.sAMAccountName intGroupSID = fnGet_HexString(objGroup.ObjectSID) objExcel.Cells(y,2) = intGroupSID 'Wscript.Echo intUserSID 'End if y = y + 1 objRecordSet.MoveNext Loop objRecordSet.Close objConnection.Close SET objSheet = NOTHING SET objWB = NOTHING objExcelApp.Quit() SET objExcelApp = NOTHING Wscript.echo "Script Finished..." ''' Function stringlist(memberOf) Dim objmemberOf ' Heart of the script, extract a list of Groups from memberOf objmemberOf = objUser.GetEx("memberOf") For Each objGroup in objmemberOf strList = strList & """" & objGroup & """" & " " Next stringlist = strUser & strList 'WScript.Echo "Groups for " & strUser & strList End Function ''' Function fnGet_HexString(intSID) Dim strRet, i, b strRet = "" For i = 0 to Ubound(intSID) b = hex(ascb(midb(intSID,i+1,1))) If( len(b) = 1 ) then b = "0" & b strRet = strRet & b Next fnGet_HexString = fnHexStrToDecStr(strRet) End Function Function fnHexStrToDecStr(strSid) Dim arrbytSid, lngTemp, j ReDim arrbytSid(Len(strSid)/2 - 1) For j = 0 To UBound(arrbytSid) arrbytSid(j) = CInt("&H" & Mid(strSid, 2*j + 1, 2)) Next fnHexStrToDecStr = "S-" & arrbytSid(0) & "-" & arrbytSid(1) & "-" & arrbytSid(8) lngTemp = arrbytSid(15) lngTemp = lngTemp * 256 + arrbytSid(14) lngTemp = lngTemp * 256 + arrbytSid(13) lngTemp = lngTemp * 256 + arrbytSid(12) fnHexStrToDecStr = fnHexStrToDecStr & "-" & CStr(lngTemp) lngTemp = arrbytSid(19) lngTemp = lngTemp * 256 + arrbytSid(18) lngTemp = lngTemp * 256 + arrbytSid(17) lngTemp = lngTemp * 256 + arrbytSid(16) fnHexStrToDecStr = fnHexStrToDecStr & "-" & CStr(lngTemp) lngTemp = arrbytSid(23) lngTemp = lngTemp * 256 + arrbytSid(22) lngTemp = lngTemp * 256 + arrbytSid(21) lngTemp = lngTemp * 256 + arrbytSid(20) fnHexStrToDecStr = fnHexStrToDecStr & "-" & CStr(lngTemp) lngTemp = arrbytSid(25) lngTemp = lngTemp * 256 + arrbytSid(24) fnHexStrToDecStr = fnHexStrToDecStr & "-" & CStr(lngTemp) End Function
dns-gw-sult,S-1-5-21-833212901-2941102506-3986841923-1101 DnsAdmins,S-1-5-21-833212901-2941102506-3986841923-1102 IIS_IUSRS,S-1-5-21-833212901-2941102506-3986841923-1102 DnsUpdateProxy,S-1-5-21-833212901-2941102506-3986841923-1103 ivanov,S-1-5-21-833212901-2941102506-3986841923-1105 ozonov,S-1-5-21-833212901-2941102506-3986841923-1108 elina,S-1-5-21-833212901-2941102506-3986841923-1111 anna,S-1-5-21-833212901-2941102506-3986841923-1113 dash,S-1-5-21-833212901-2941102506-3986841923-1115 denis,S-1-5-21-833212901-2941102506-3986841923-1116 danuev,S-1-5-21-833212901-2941102506-3986841923-1119
use strict; use warnings; use Data::Dumper; my (%input, %output,$max); my $input_file = "users.txt"; my $output_file = "output.txt"; my $sambaSID = "S-1-5-21-833212901-2941102506-3986841923-"; open FIN, "<$input_file"; while (<FIN>) { chomp(); if (/(.*),$sambaSID(.*)/) { $input{$2}=$1; $max=$2 if $2 > $max; } } close FIN; print Dumper(\%input); print Dumper($max); open FOUT, ">$output_file"; for (my $i=1001;$i<=$max;$i++) { if (exists $input{$i}) { print "input: $input{$i} i: $i\n"; print FOUT "$input{$i}\n"; } else { print FOUT "user$i\n"; } } close FOUT;
user1001 user1002 user1003 user1004 user1005 user1006 user1007 user1008 user1009 user1010 user1011 user1012 user1013 user1014 user1015 user1016 user1017 user1018 user1019 user1020 user1021 user1022 user1023 user1024 user1025 user1026 user1027 user1028 user1029 user1030 user1031 user1032 user1033 user1034 user1035 user1036 user1037 user1038 user1039 user1040 user1041 user1042 user1043 user1044 user1045 user1046 user1047 user1048 user1049 user1050 user1051 user1052 user1053 user1054 user1055 user1056 user1057 user1058 user1059 user1060 user1061 user1062 user1063 user1064 user1065 user1066 user1067 user1068 user1069 user1070 user1071 user1072 user1073 user1074 user1075 user1076 user1077 user1078 user1079 user1080 user1081 user1082 user1083 user1084 user1085 user1086 user1087 user1088 user1089 user1090 user1091 user1092 user1093 user1094 user1095 user1096 user1097 user1098 user1099 user1100 dns-gw-sult IIS_IUSRS DnsUpdateProxy user1104 ivanov user1106 user1107 ozonov user1109 user1110 elina user1112 anna user1114 dash denis user1117 user1118 danuev
rem (CN) CN Users rem dsadd group "cn=,cn=users,dc=mvi,dc=srv" for %%A in ( jira-users, jira-administrators, Developers, jira-developers, mvi-users, berry-dev, online-developers, marketing-users, Marketing, ne-users, ne-developers, ne-admin, marketing-administrators, online-users, bills,QA, ) do dsadd group "cn=%%A,cn=users,dc=mvi,dc=srv" rem (OU) rem dsadd group "cn=,cn=groups,dc=mvi,dc=srv" dsadd ou "ou=Groups,dc=mvi,dc=srv" for %%B in ( vpn-users, svn-users, jenkins-adm, jenkins, PHP_Developers, amazon-users, ) do dsadd group "cn=%%B,ou=groups,dc=mvi,dc=srv"
dsadd User "cn=user-1101 user-1101 ,cn=users,dc=mvi,dc=srv" -UPN dns-gw-sult@mvi.srv -samid dns-gw-sult -display "user-1101 user-1101 " -fn user-1101 -ln user-1101 -pwd "p6Jx3Xre" -mustchpwd yes -disabled no -pwdneverexpires yes
. . : dsadd group <GroupDN> [-secgrp {yes | no}] [-scope {l | g | u}] [-samid <SAMName>] [-desc <Description>] [-memberof <Group ...>] [-members <Member ...>] [{-s <Server> | -d <Domain>}] [-u <UserName>] [-p {<Password> | *}] [-q] [{-uc | -uco | -uci}] <DN_> stdin. (DN) . , (stdin). -secgrp {yes | no} , (yes) (no) . : yes. -scope {l | g | u} , (l), (g) (u). , . : . -samid <_SAM> SAM <_SAM> (, "operators"). -desc <> <>. -memberof <...> , DN <...>. -members <...> . <...>. {-s <> | -d <>} -s <> () <>. -d <> . : . -u <> <>. : . : , \ - (UPN). -p {<> | *} <>. *, . -q : . {-uc | -uco | -uci} -uc . -uco . -uci . . , (STDIN). STDIN , . STDIN , CTRL+Z (EOF). , (, "CN=Ivan Ivanov,CN=Users,DC=microsoft,DC=com"). , (, ). . : dsadd computer /? - . dsadd contact /? - . dsadd group /? - . dsadd ou /? - . dsadd user /? - . dsadd quota /? - . : dsadd /? - . dsget /? - . dsmod /? - . dsmove /? - . dsquery /? - , . dsrm /? - .
Source: https://habr.com/ru/post/173985/
All Articles