在尝试将现有用户与现有安全组配对(域迁移)时,如何解决“最后一个标记以‘C’开头”和“更改修改条目缺少终止符‘-’”上的 LDIFDE 错误?
我执行这个:
C:\Users\Administrator\Downloads\ldif_files>ldifde -i -k -f test.ldf -v -j "C:\Users\Administrator\Downloads\ldif_files"
Connecting to "dc1.company.local"
Logging in as current user using SSPI
Importing directory from file "test.ldf"
Loading entries
There is a syntax error in the input file
Failed on line 6. The last token starts with 'C'.
The change-modify entry is missing the terminator '-'.
0 entries modified successfully.
An error has occurred in the program
C:\Users\Administrator\Downloads\ldif_files>
test.ldf是这样的:
dn: CN=PrinterAdmins,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
add: member
objectClass: top
objectClass: group
member: CN=John Doe,OU=Track-It!,OU=Admins,OU=CMPNY,DC=company,DC=local
我已经花了几个小时费力地排除故障,但还是没有成功。我试过了……
- 在末尾添加一个链接“-”
- 在末尾添加一行“-”,后跟一个空行(共两行)
- 其他一些事情;花了很多时间在谷歌上寻找解决方案,尝试了所有方法,但都没有成功
OU、安全组和用户都存在。我怎么也想不通。我已成功从“oldcompany.com”域导入 OU 结构,使用 Notepad++ 删除特定的空格/回车符,并将“dc=oldcompany,dc=com”替换为“dc=company,dc=local”,导入用户,导入安全组 - 一切顺利。剩下的就是将成员资格部分导入到每个组(将用户绑定到他们的组)。
请帮忙。 :(
我正在做什么/试图做什么/已经做了什么?我大约有 700 个组,需要将几百个用户配对。导入 OU 结构,然后导入用户,然后导入 [空] 组,成功了。剩下的就是将用户与他们的组配对。从旧的“company.com”域(来自 2003 DC)移动到全新的 2012 DC 上的“company.local”。想要避免手动添加用户时浏览所有 700 个组(因为我确实有一个 Excel 报告,告诉我每个组的成员/每个用户是哪个组的成员)。
编辑:解决方案!
为了让它发挥作用,我必须这样做:
- 删除所有 objectClass 行;下次我需要将其从导出的命令参数中删除
- 文件的第一行应该是一个空白行,后面跟着第一组的“dn:”行
- 该文件的倒数第二行应该是一个 -,后面跟着一个空白行(文件的最后一行)
因此,要将用户、安全组和组成员身份从 company.com 导入 company.local,我必须执行以下操作:
- 从 company.com 导出 OU 结构;在 company.com 上,当您使用时,我们在域的根目录中有一个 OU“CMPNY”Active Directory 用户和计算机包含所有内容(安全组、用户、OU、GPO 等)
- 执行ldifde -f出口单位.ldf-s源地址-t 3268 -d “OU=CMPNY,DC=company,DC=com” -p 子树 -r “(objectCategory=organizationalUnit)” -l “cn,objectclass,ou”在连接到旧 company.com AD 域的任何机器上;它将连接到源地址(域控制器)进行搜索和导出
- 从 company.com 导出用户
- 执行区分大小写导出用户.ldf-s源地址-t 3268 -d “OU=CMPNY,DC=company,DC=com” -p 子树 -r “(&(objectCategory=Person)(objectClass=user))” -l “cn,displayName,distinguishedName,name,objectCategory,objectClass,sAMAccountName”
- 从 company.com 导出不含成员的组(因此只是空的安全组)
- 执行ldifde -f导出组为空.ldf-s源地址-t 3268 -d “OU=CMPNY,DC=company,DC=com” -p 子树 -r “(&(objectCategory=group)(objectClass=group))” -l “cn,name,sAMAccountName,grouptype,objectclass”
- 从 company.com 导出带有成员的组(包含最低限度的信息以识别哪些用户对象是哪个组的成员)
- 执行ldifde -f导出群组成员.ldf-s源地址-t 3268 -d “OU=CMPNY,DC=company,DC=com” -p 子树 -r “(&(ObjectCategory=group)(objectClass=group)(name=)(会员=))”-l“成员”
- 将旧 company.com 的 OU 骨架导入新 company.local 域;我们在 company.local 中使用不同的 OU 骨架结构(根目录下没有“CMPNY”OU),因此我们导入的这个 OU 骨架仅仅是为了导入旧数据,导入所有内容后,我们可以重命名/清理/删除任何内容,然后将导入的对象移动并排列到我们决定在新 company.local 域上使用的新的/不同的 OU 骨架结构标准上
- 调整导出OU.ldf通过 Notepad++(我个人偏好),找到DC=通信并全部替换为DC=本地并保存文件
- 执行ldifde-i-k-f出口单位.ldf-v-j“C:\”;您可以更改 -j 参数值的路径,或者删除-j “C:\”完全——它所做的就是将所有错误记录到文件中
- 将用户从 company.com 导入 company.local
- 调整导出用户.ldf通过 Notepad++,找到DC=通信并全部替换为DC=本地并保存文件
- 执行ldifde-i-k-f导出用户.ldf-v-j“C:\”
- 将 company.com 中的空 [安全] 组 shell 导入 company.local
- 调整导出组空文件通过 Notepad++,找到DC=通信并全部替换为DC=本地并保存文件
- 执行ldifde-i-k-f导出组为空.ldf-v-j“C:\”
- 将用户和组之间的成员资格配对从 company.com 导入到 company.local
- 打开导出组成员.ldf通过 Notepad++
- 仔细检查此文件的内容;注意单个项目是如何分成多行的(例如,如果有人决定在一行的 1/3 处按下 ENTER 键)——它们通常应该在一行上,而不是溢出到多行中
- 首先要修复多行溢出问题。为此,选择两行之间需要删除的所有字符数据来修复它(仅针对那一个实例),然后用实际上没有任何内容的方式“全部替换”它
- 查找 dc=com 并将所有内容替换为 dc=local
- 用两行替换所有空行:第一行应为单个 - 字符,第二行应为空白行;您可以通过选择该空格并使用 Notepad++ 中的扩展搜索模式将所有内容替换为 \r\n-\r\n\r\n 来实现此目的
- 确保文件的第一行在第一个“dn:”行(对于第一组)之前是空白行(没有空格,只有空行)
- 确保文件倒数第二行是 - 行,后跟一个空白行(作为最后一行)
- 找到“changetype:add”并将所有内容替换为更改类型: 修改\r\n添加: 成员(基本上,这会将“添加”更改为“修改”,并在“添加:成员”下方创建新行)
- 执行ldifde-i-k-f导出群组成员.ldf-v-j“C:\”
- 打开导出组成员.ldf通过 Notepad++
示例 exportGroupsMembers.ldf(第一行中有一个空格 - 它不应该有空格,而应该是一个空白行;- 行之后的最后一行也应该是一个空白行):
dn: CN=ERP_User_Test,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
add: member
member: CN=Ralph Doe,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Grace McPhillip,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Logan Rowley,OU=Track-It!,OU=Admins,OU=CMPNY,DC=company,DC=local
-
dn: CN=FolderSecurity_StockReportsDatabase_C,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
add: member
member: CN=David Collins,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Kelly Paris,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=genericSalesUser,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
-
dn: CN=FolderSecurity_StockReportsDatabase_R,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
add: member
member: CN=Ron Burgandy,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Jane Doe,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Bill Gates,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
-
这主要是为了实现这一点:当我们将共享网络驱动器迁移到新网络时,单个文件夹的安全权限会保留下来。我们不必重新创建所有组,将成员重新添加到组中,然后仔细检查 1000 多个具有独特安全权限的文件夹(我知道这很愚蠢)。
经过这一切,我们可以..
- 进入并删除所有永久过时的用户对象(例如 genericITAdmin 和 genericITModerator 和 genericITTech 管理员、测试帐户、随机一次性帐户等),但保留已停用的真实人类帐户
- 重命名安全组以标准化命名约定,然后开始清理安全组以进行合并、查找模式、删除独特的安全权限等
- 将对象移至我们新的 OU 骨架结构,并在我们完成清理、操作、删除和重命名旧内容后,从根目录删除 CMPNY OU
我感谢以下主题的回复者:-[硬]论坛 -服务器故障 -科技网
我关注整体导出和导入工作流程的主要资源
我在旅途中使用过或影响过我的其他有用信息
答案1
您的文件应该如下所示。为了确定,我刚刚在 Windows 8 上针对 LDS 进行了测试。
dn: CN=PrinterAdmins,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
add: member
member: CN=John Doe,OU=Track-It!,OU=Admins,OU=CMPNY,DC=company,DC=local
-
如果值中没有特殊字符,那么 ANSI 文件就足够了。
你可能已经拥有过,但如果你还没有http://support.microsoft.com/kb/237677可能有帮助。
答案2
您的回答让我更接近我最终找到的答案。我正在更新数千个群组。这是我的最终答案……“add:member”应该改为“replace:modify”……其他一切都与上面相同^^^
dn: CN=FolderSecurity_StockReportsDatabase_R,OU=GL,OU=Groups,OU=CMPNY,DC=company,DC=local
changetype: modify
replace: member
member: CN=Ron Burgandy,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Jane Doe,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
member: CN=Bill Gates,OU=Uncategorized,OU=Users,OU=CMPNY,DC=company,DC=local
-