1

私は側面でいくつかのシステム管理者タイプのものを学ぼうとしていますが、これは非常に新しいものです。私の質問は単純に思えますが、これを行う方法が見つからないようです。シナリオは次のとおりです。

  • ラップトップの Hyper-V の下に 2 台の Windows Server 2012 マシンをセットアップしました
  • 両方に新しいフォレストをセットアップし、それぞれを DC に昇格させました。1 つのドメインが mydomain.com と呼ばれ、もう 1 つのドメインが yourdomain.com と呼ばれるとします。両方のドメイン間に双方向の信頼があり、その信頼を検証しました。
  • mydomain.com と yourdomain.com に、同じ名前のダミー ユーザーと異なる名前のダミー ユーザーを追加しました。

ここで、mydomain.com のどのユーザーが yourdomain.com にも存在するかを確認する必要があります。たとえば、mydomain.com に「fred.flintstone」というユーザーがいて、yourdomain.com にもそのユーザーが存在するかどうかを確認したいとします。

私は VBScript/Perl/Python/Batchfile および/または DS ツール (dsquery、dsget など) の使用に制限されていますが、残念ながら powershell は (今のところ) 提供されていません。

これをスクリプト化する方法についての指針は大歓迎です。

前もって感謝します

PS: この演習の最終的な目標は、mydomain.com のすべてのグループを確認し、それらのグループが yourdomain.com にも存在するかどうかを確認することです。存在する場合は、ユーザーを mydomain.com から対応するグループの yourdomain.com に移動し、存在しない場合は、yourdomain.com にグループを作成し、対応するユーザーを作成します。

4

3 に答える 3

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
于 2012-11-26T10:20:11.267 に答える
0

最終的な目標がユーザーを mydomain.com から yourdomain.com に移行することである場合は、今すぐやめて別の道を検討する必要があります。

ユーザーとグループを同じ名前で作成すると、それらのユーザーとグループは mydomain.com のリソースにアクセスできなくなります。これは、名前が実際に使用されるのではなく、SID と呼ばれるセキュリティ識別子であるためです。これは、yourdomain.com ではまったく異なります。

mydomain.com のリソースにアクセスする必要がある場合は、アクセス制御リスト (ACL) を変更する必要があります。ユーザー、グループ、サーバーが少ない場合でも、これは巨大なティースクです。

これが、Microsoft が ADMT (Active Directory Migration Tool) と呼ばれる無料のツールを提供している理由です。ここからダウンロードできます。残念ながら、まだ Server 2012 をサポートしていないため、ターゲット ドメインにも 2008 R2 Server が必要です。ここを見てください。ADMT では、ユーザーの SID を SIDHistory という属性に追加できます。SIDHistory 属性は、アクセスを許可するかどうかを決定するときに、リソース所有者によってチェックされます。SIDHistory con は手動で変更できません。

于 2012-11-23T09:52:41.423 に答える
0

Active-Directory は最初はディレクトリです。ディレクトリについて考えるときは、LDAP について考えます。

最初に、2 人の同一ユーザーとは何かを考える必要があります。つまり、決定を下すために同一でなければならない属性のリストを作成する必要があります。

次に、LDIFDE.EXE (またはおそらくここでは CSVDE.EXE) ツールを使用して、すべてのユーザーをエクスポートできますが、興味深い属性、DN、および重要な属性のみが含まれます。LDAP ツリーから開始することを考慮して抽出に注意してください (一般的なシステム ユーザーを避けるため)。また、ユーザー用に「user」と「inetOrgPerson」の 2 つのクラスが存在することも考慮してください。

次に、従来のスクリプト ツールとアルゴリズムを使用して、2 つのリストを比較できます。LDIFDE.EXE を再度使用して、不足しているユーザーを作成してみませんか。

于 2012-11-23T05:02:04.170 に答える