2012-11-22 4 views
1

측면에서 일부 sys-admin 유형의 자료를 배우려고하는데, 매우 새로운 것입니다. 내 질문은 단순 해 보이지만 이렇게 할 수있는 방법을 찾을 수없는 것 같습니다. 여기에 시나리오의 :한 도메인의 사용자가 다른 도메인에 있는지 확인하십시오.

  • 내 노트북에 설치 2에서 Windows Server 모두에서
  • I 설정 새로운 숲의 Hyper-V에서 2012 기계를 가지고 있고 DC에 각각 승진. 한 도메인을 mydomain.com이라고하고 다른 도메인을 yourdomain.com이라고합니다. 두 도메인 간에는 양방향 신뢰가 존재하며 그 신뢰를 확인했습니다. 내가하고 싶은 것을
  • 내가 mydomain.com 및 yourdomain.com 일부 더미 사용자를 추가 한 같은 이름의 일부와 일부 다른 사람
  • 이제

은 mydomain.com에있는 사용자를 확인하는 것입니다 yourdomain.com에도 존재합니다. 예를 들어 mydomain.com에 "fred.flintstone"이라는 사용자가 있으며 yourdomain.com에도 그가 있는지 확인하고 싶습니다.

내가 VBScript를/펄/파이썬/배치 파일 및/또는 DS 도구를 사용하여 제한 생각은 (DSQUERY처럼 Dsget 도구 등), 불행하게도 PowerShell은 어떻게 스크립트이 것에

모든 포인터 (지금은) 밖으로 환영. 사전에

감사

PS : 이 연습의 목적은 mydomain.com에있는 모든 그룹을 확인하고 해당 그룹뿐만 아니라 yourdomain.com에 존재하는지 확인하기 위해 결국입니다. 존재하는 경우 mydomain.com에서 해당 그룹의 yourdomain.com으로 사용자를 이동하고 존재하지 않으면 yourdomain.com에 그룹을 만들고 해당 사용자를 만듭니다.

답변

0

내가 원했던 VBScript를 쓸 수있어서 여기에서 공유 할 것입니다. 이 스크립트는 아마도 매우 좋은 정리가 필요할 것입니다.하지만 지금은 일을 처리하므로 다른 사람들에게도 도움이되기를 바랍니다.

' Get OU 

strOU1 = "OU=here,DC=mydomain,DC=com" 
strOU2 = "OU=there,DC=yourdomain,DC=com" 

Dim samid 
Dim ldap_command 

' Create connection to AD 
' 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 

' Create command 
' 
Set objCommand1 = CreateObject("ADODB.Command") 
objCommand1.ActiveConnection = objConnection 
objCommand1.Properties("Page Size") = 1000 

' Execute command to get all users in OU 
' 
objCommand1.CommandText = _ 
    "<LDAP://" & strOU1 & ">;" & _ 
    "(&(objectclass=user)(objectcategory=person));" & _ 
    "adspath,distinguishedname,sAMAccountName;subtree" 

Set objRecordSet = objCommand1.Execute 

' Show info for each user in OU 
' 
Do Until objRecordSet.EOF 

    ' Show required info for a user 
    ' 
    samid = objRecordSet.Fields("sAMAccountName").Value 
    WScript.Echo "Processing " & objRecordSet.Fields("sAMAccountName").Value 
    Set objCommand2 = CreateObject("ADODB.Command") 
    ldap_command = _ 
    "<LDAP://" & strOU2 & ">;" & _ 
    "(&(objectclass=user)(objectcategory=person)" & _ 
    "(sAMAccountName=" & samid & "));" & _ 
    "adspath,distinguishedname,sAMAccountName;subtree" 

    objCommand2.CommandText = ldap_command 

    objCommand2.ActiveConnection = objConnection 
    objCommand2.Properties("Chase referrals") = &H40 

    Set objRecordSet2 = objCommand2.Execute 

    If objRecordSet2.RecordCount = 0 Then 
     Wscript.Echo "The sAMAccountName is not in use." 
    Else 
     Wscript.Echo "This ID is in use" 
    End If 

    ' Move to the next user 
    ' 
    objRecordSet.MoveNext 

Loop 
0

Active Directory는 디렉토리라고 생각할 때 LDAP이라고 생각하면 가장 먼저 디렉토리가됩니다.

먼저 두 명의 동일한 사용자가 무엇인지 생각해야합니다. 즉, 결정을 내리기 위해서는 동일해야하는 속성 목록을 만들어야합니다.

둘째로 LDIFDE.EXE (또는 여기서는 CSVDE.EXE) 도구를 사용하여 모든 사용자를 내보낼 수 있지만 흥미로운 특성 DN 및 significants attributs 만 사용할 수 있습니다. LDAP 트리에서의 시작을 고려하여 (일반적인 시스템 사용자를 피하기 위해) 사용자를위한 두 개의 클래스, 즉 'user'와 'inetOrgPerson'이 존재한다고 고려하십시오.

그런 다음 기존 스크립팅 도구와 알고리즘을 사용하여 두 목록을 비교할 수 있습니다. 누락 된 사용자를 만들기 위해 LDIFDE.EXE를 다시 사용하지 않는 것이 좋습니다.

+0

감사합니다. JPBlanc,이 방법을 시도해 보겠습니다. 죄송합니다. '동일한 사용자'의 기준에 동일한 samid가 있다는 언급을 잊어 버렸습니다. – NullPointer

0

궁극적 인 목표가 mydomain.com에서 yourdomain.com으로 사용자를 마이그레이션하는 것이라면 지금 당장 중지하고 다른 경로를 고려해야합니다.

같은 이름의 사용자 및 그룹을 만들면 해당 사용자 및 그룹이 mydomain.com의 리소스에 액세스 할 수 없습니다. 이름이 실제로 사용되지는 않지만 SID라는 보안 식별자가 있기 때문입니다. 이것은 yourdomain.com에서 완전히 다릅니다.

mydomain.com의 리소스에 액세스해야하는 경우 액세스 제어 목록 (ACL)을 수정해야합니다. 소수의 사용자, 그룹 및 서버가 있더라도 거대한 티스 크입니다.

Microsoft는 ADMT (Active Directory Migration Tool)라는 무료 도구를 제공합니다. here을 다운로드 할 수 있습니다.불행히도 아직 서버 2012를 지원하지 않으므로 대상 도메인에도 2008 R2 서버가 필요합니다. Look here. ADMT를 사용하면 SIDHistory라는 특성에 사용자 SID를 추가 할 수 있습니다. SIDHistory 속성은 액세스 권한을 부여할지 여부를 결정할 때 리소스 소유자가 확인합니다. SIDHistory는 수동으로 수정할 수 없습니다.

+0

내가보기 엔 감사합니다. ADMT도 살펴볼 것입니다. – NullPointer

관련 문제