我们正在将我们的用户文件夹迁移到新的服务器上。 它们是\\server\users\UserName\ ,所以\\server\users\Tim Smith\ 。 我们基本上想把server改成server1我们有很多用户, 所以手动编辑每个用户是耗时的。
对于我可以用来批量编辑所有用户的工具,有什么build议吗?
如果您的用户文件夹名称与其帐户名称相匹配,则Active Directory用户和计算机可以执行您所需的操作。
假设所有用户都在同一个OU中,只需突出显示所有用户,右键单击并select“Properties”,进入“Profile”选项卡,然后以以下格式input新path:
\\server\users\%USERNAME%\
如果它们分布在多个OU上,则会有些困难,但不会太多。 假设您使用Windows 2003版本的Active Directory用户和计算机:
在AD顶部的“保存的查询”节点上,执行“新build”/“查询”。
根据需要命名查询,并根据需要提供描述。 在查询定义中,select“查询根”的用户帐户(或域的根,如果它们是根子节点的OU)的上方的OU。
点击“定义查询”。 在“查找公共查询”对话框中,从“用户”选项卡上的“名称”标题右侧的下拉列表中select“有一个值”。 再次点击“确定”和“确定”来定义查询。
突出显示您新创build的查询,并右键单击并select“刷新”(或按F5)如果查询不是填充右窗格。
突出显示右窗格中的用户,右键单击并select“属性”。 转到“configuration文件”选项卡并按上述进行更改。
易如反掌。
或者,如果您不想使用GUI,则可以使用batch file来pipe理该文件并将其作为脚本运行。 或者你可以把它input到命令行中。
我会运行这样的事情,如果你想改变你的域的所有用户。
dsquery users | dsmod user -hmdir \\server\users\$username$\
dsmod认识到$ username $标志意味着从dsquery命令传送给它的用户的samid。 它也会识别附加到dsmod命令的-profile命令的这个标志。
注意:如果你的共享文件夹是一个隐藏的共享,这将不起作用,隐藏的共享中的问号愚弄了这个命令,认为你是早些时候启动标志,那么你真的是。 我已经尝试了一些转义字符,但迄今尚未find解决此问题的方法。
如果您的所有用户都在特定的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
注意:如果你在一个batch file中使用这个,for循环标记必须以双百分比作为前缀, %% A而不是%A
这将查询指定的OU中的所有用户,然后将其输出到文件。 然后运行一个for循环,从文件中的FQDN中抽取用户名,并将其插入到一个dsmod命令中,以更改其主目录。 最后,如果for循环成功运行,则删除自己创build的文件。
我希望这可以帮助,即使你不使用batch file做这个特定的工作,它可以帮助你在将来。 关于这样的事情的好处是,你可以保存它,如果你将来需要改变一些东西,只需要做一些改变,你只需要重新运行它就可以完成你想要的改变。 另外,如果您发现某人进行了未经授权的更改,则只需双击即可将其切换回来。
您可以使用ADModify.NET批量更改用户属性。
其他基于脚本的答案都很好(脚本是我最好的锤子),但是您也可以通过DNS CNAME和服务器重命名完成相同的操作。 将“服务器”更改为“oldserver”,并将CNAME“server” – >“server1”