我们正在将用户文件夹迁移到新服务器。它们的形式为\\server\users\UserName\
,因此\\server\users\Tim Smith\
。我们本质上想更改server
为server1
我们有相当多的用户;因此手动编辑每个用户非常耗时。
关于我可以用来批量编辑所有用户的工具,有什么建议吗?
答案1
如果您的用户文件夹名称与其帐户名称相匹配,Active Directory 用户和计算机就可以执行您想要的操作。
假设所有用户都在同一个 OU 中,只需突出显示所有用户,右键单击并选择“属性”,转到“配置文件”选项卡,然后以以下形式输入新路径:
\\server\users\%USERNAME%\
如果它们分布在多个 OU 中,则难度会稍微大一些,但不会太大。假设您使用的是 Windows 2003 版本的 Active Directory 用户和计算机:
在 AD 顶部的“已保存的查询”节点,执行“新建”/“查询”。
随意命名查询,并提供描述(如果需要)。在查询定义中,选择用户帐户上方的 OU 作为“查询根”(或域的根,如果它们位于根的子 OU 中)。
单击“定义查询”。在“查找常见查询”对话框中,从“用户”选项卡上“名称”标题右侧的下拉列表中选择“有值”。单击“确定”,然后再次单击“确定”以定义查询。
如果查询未填充右侧窗格,请突出显示新创建的查询,然后右键单击并选择“刷新”(或按 F5)。
在右窗格中突出显示用户,右键单击并选择“属性”。转到“个人资料”选项卡并按照上述说明进行更改。
易如反掌。
答案2
另外,如果您不想使用 GUI,您可以使用批处理文件来管理它并将其作为脚本运行。或者您可以直接将其输入到命令行中。
如果您想更改域中的所有用户,我会运行类似的操作。
dsquery users | dsmod user -hmdir \\server\users\$username$\
dsmod 识别出 $username$ 标志表示从 dsquery 命令传送给它的用户的 samid。它还识别出附加到 dsmod 命令的 -profile 命令的此标志。
注意:如果您的共享文件夹是隐藏共享,则此方法无效,隐藏共享中的问号会欺骗命令,使其认为您比实际更早启动标志。我尝试使用一些转义字符,但到目前为止还没有找到可以解决此问题的方法。
如果您的所有用户都在特定 OU 中,则需要更改 dsquery 命令。对于该命令,您需要添加包含所有要更改的用户的 OU 的完全限定域名。有趣的是,这可以通过 dsquery OU 命令找到。
该命令将如下所示,
dsquery users [fully qualified domain name of the OU ] | dsmod user -hmdir \\server\users\$username$\
如果您想要批量处理并使用隐藏共享,则可以使用 FOR 循环来执行此操作,但语法有点复杂,因为需要循环首先提取所有用户,然后仅提取他们的姓名,然后返回并将该信息插入 dsmod 命令的特定区域。这很难看,但我会这样做。
dsquery user [fully qualified domain name of the ou] > c:\users.txt & for /f "delims==, tokens=2" %A in (c:\users.txt) do (dsmod user "CN=%A[rest of FQDN here] -hmdir "\\server\users$\%A\" && del c:\users.txt -q
注意:如果在批处理文件中使用它,for 循环标记前面必须加上双百分比,即 %%A 而不是 %A
这将查询指定 OU 中的所有用户,然后将其输出到文件中。然后,它会运行一个 for 循环,从文件中的 FQDN 中提取用户的名称,并将其插入到更改其主目录的 dsmod 命令中。最后,如果 for 循环成功运行,它会通过删除其创建的文件来清理自身。
我希望这能有所帮助,即使您不使用批处理文件来完成这项特定工作,它也能在未来为您提供帮助。这类东西的好处在于您可以保存它,如果您将来需要更改其他内容,只需进行一些小更改,您所要做的就是重新运行它以进行所需的更改。此外,如果您发现有人进行了未经授权的更改,您只需双击即可将其切换回来。
答案3
您可以使用ADModify.NET批量更改用户属性。
答案4
其他基于脚本的答案都很好(脚本是我最擅长的),但您也可以使用 DNS CNAME 和服务器重命名来实现相同的目的。将“服务器”更改为“旧服务器”,并将 CNAME“服务器”->“服务器 1”