我正在尝试学习一些sys-admin类型的东西,而且我是非常新的。我的问题似乎很简单,但我似乎找不到办法做到这一点。这是场景:
现在,我想做的是检查yourdomain.com中mydomain.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中创建该组并创建相应的用户。
答案 0 :(得分:0)
Active-Directory首先是一个目录,当你想到Directory时,你认为是LDAP。
首先要考虑两个相同的用户是什么。我的意思是,你必须创建必须相同的属性列表才能做出决定。
其次,您可以使用LDIFDE.EXE(或者可能是CSVDE.EXE)工具导出所有用户,但只使用有趣的属性,DN和重要的属性。小心exals考虑在LDAP树中启动(为了避免常见的系统用户),还要考虑它为用户存在两个类:'user'和'inetOrgPerson'。
然后您可以使用传统的脚本工具和算法来比较这两个列表。为什么不再使用LDIFDE.EXE创建缺少的用户。
答案 1 :(得分:0)
如果您的最终目标是将用户从mydomain.com迁移到yourdomain.com,那么您现在应该认真停止并考虑不同的路径。
创建具有相同名称的用户和组将不允许这些用户和组访问mydomain.com中的资源。这是因为实际上并未使用该名称,而是名为SID的安全标识符。这将在yourdomain.com中完全不同。
如果您必须访问mydomain.com中的资源,则需要修改访问控制列表(ACL)。即使用户,组和服务器很少,这也是一个巨大的任务。
这就是为什么Microsoft提供了一个名为ADMT(Active Directory迁移工具)的免费工具。它可以下载here。不幸的是,它还不支持Server 2012,因此您也需要在目标域中使用2008 R2 Server。看here。 ADMT允许您将用户SID添加到名为SIDHistory的属性中。资源所有者在决定是否提供访问权时检查SIDHistory属性。 SIDHistory con不能手动修改。
答案 2 :(得分: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