0

이 VBS를 사용하여 한 그룹의 사용자 목록을 다른 그룹으로 이동합니다. 지금까지 너무 좋아. 나는 VB에 관해서 신참이다. 도전 과제는 20 개의 서로 다른 동기화 그룹 (Sync01-Sync20)과 20 개의 마이그레이션 그룹 (Mig01-Mig20)이 있다는 것입니다. 사용자가 속한 마녀 Sunc 그룹을 식별하는 코드의 확장이 필요합니다. 그런 다음 이것을 올바른 Mig 그룹으로 "변환"합니다. 어떤 사람? 당신이 원하는 모든이 correspondig 미그 그룹에 각 동기화 그룹에서 전송 그룹 구성원 인 경우 :VBS Active Directory (2003) 사용자를 한 그룹의 그룹에서 다른 그룹으로 이동

DIM objGroup, objGroup2, objRootLDAP, objFSO, objInput, objConnection, objCommand 
DIM strUser 

On Error Resume Next 

Set objRootLDAP = GetObject("LDAP://rootDSE") 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 
Set objCommand = CreateObject("ADODB.Command") 
objCommand.ActiveConnection = objConnection 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objInput = objFSO.OpenTextFile("users.txt") 
Set objGroup = GetObject("LDAP://cn=Sync01,ou=Huset,dc=bb,dc=net") 
Set objGroup2 = GetObject("LDAP://cn=Mig01,ou=Huset,dc=bb,dc=net") 

Do Until objInput.AtEndOfStream 
strUser = ObjInput.ReadLine 

objCommand.CommandText = "<LDAP://dc=bb,dc=net>;(&(objectCategory=person)(sAMAccountName=" & strUser & "));distinguishedName,userAccountControl;subtree" 

Set objRecordSet = objCommand.Execute 

If objRecordSet.RecordCount = 0 Then 
    MsgBox strUser & " was not found!" & VbCrLf & "Skipping", VbOkOnly,"User Not Found" 
Else 
    strDN = objRecordSet.Fields("distinguishedName") 
    Set objUser = GetObject("LDAP://" & strDN) 
    objGroup.Remove(objUser.AdsPath) 
    objGroup2.Add(objUser.AdsPath) 
End If 
Loop 

WScript.Echo "Complete" 
+0

주어진에 대해 "올바른"미그 그룹 무엇입니까 그룹을 동기화 하시겠습니까? 사용자가 둘 이상의 Mig 또는 Sync 그룹의 구성원 일 수 있습니까? –

+0

제 잘못입니다. 사용자가 Sync01의 구성원 인 경우 올바른 grup은 Mig01입니다. 이 그룹은 Quest라는 도구의 마이그레이션 흐름을 제어하는 ​​데 사용됩니다. 구성원이 잘못된 그룹에 추가되면 이주가 실패합니다. 그리고 문제를 찾아서 수정하기 위해 쓰루 로그를 검색하는 데 3-4 시간을 소비해야합니다. – user2681351

답변

0

,이 같은 일이 수행해야합니다

Set fso = CreateObject("Scripting.FileSystemObject") 

Set userlist = CreateObject("Scripting.Dictionary") 
userlist.CompareMode = vbTextCompare 
Set f = fso.OpenTextFile("users.txt") 
Do Until f.AtEndOfStream 
    userlist.Add f.ReadLine, True 
Loop 
f.Close 

domain = GetObject("LDAP://rootDSE").Get("defaultNamingContext") 

For i = 1 To 20 
    n = Right("0" & i, 2) 
    Set gSync = GetObject("LDAP://CN=Sync" & n & ",OU=Huset," & domain) 
    Set gMig = GetObject("LDAP://CN=Mig" & n & ",OU=Huset," & domain) 
    For Each m In gSync.Members 
    Set user = GetObject(m.ADsPath) 
    If userlist.Exists(user.sAMAccountName) Then 
     gMig.Add(m.ADsPath) 
     gSync.Remove(m.ADsPath) 
    End If 
    Next 
Next 
+0

감사! 내가 말했듯이 스크립트는 내 장점이 아닙니다. 원본 스크립트에서이 문제를 어떻게 방지합니까? 테스트 환경에서 작업하기 위해 작성한 스 니프가 있지만 모든 사용자가 이동합니다. 이 코드를 원래의 게시물과 동일한 "Users.txt"를 따르는 방법이 필요합니다. – user2681351