我是一名工作Active Directorynetworking的自学成才的pipe理员,用于在30台PC上进行Windowslogin。 我从其他人那里inheritance了这个系统,他们也没有任何直接的微软培训,结果我在一些事情上处于黑暗之中。
networking本身有一台Windows Server 2008 R2计算机,充当域控制器,DNS,文件共享等。login工作正常,但是我在禁用旧帐户的同时在用户列表周围漫游,我注意到一些我不太了解的东西。
以下是一些示例用户帐户:
login名称: john
名字: 约翰
姓氏: 史密斯
显示名称: John Smith
对象的规范名称: domain.com/Users/john
login名称: 鲍勃
名字: 鲍勃
姓氏: 法语
显示名称: 鲍勃法文
对象的规范名称: domain.com/Users/Bob法文
当前的域控制器是从另一个用来运行Windows Server 2003的域控制器交换的。第一个示例帐户是在Server 2003框为DC时创build的,第二个是在较新的Server 2008 R2框为DC时创build的。 标准名称为什么不同,它有什么区别?
我最恼火的事实是,我的用户列表在活动目录浏览器有一半的帐户为'名字'和一半'名字姓氏'。
我可以做一些事情,使他们都没有打破工作账户一样吗?
Active Directory不关心用户帐户对象的RDN(规范名称的最后部分)如何与其他属性(如显示名称或login名称)相关 – 只要每个单独的属性的值不违反架构定义。
在Windows Server 2003和Windows Server 2008 R2之间,Active Directory用户和计算机(以及许多其他对话框)中的“新用户”表单的行为发生了显着变化 – 这可能是为什么他们不一致
您可以使用PowerShell移动非系统帐户,然后通过用户并将其重命名为任何显示名称:
# Create new OU named RegularUsers New-ADOrganizationalUnit -Name RegularUsers -Path "dc=domain,dc=com" # Retrieve all users that are not critical system objects $users = Get-ADUser -SearchBase "CN=Users,DC=domain,DC=com" -SearchScope OneLevel -Filter {-not(isCriticalSystemObject -like '*')} # Go through each and move to the new OU foreach($user in $users){ Move-ADObject $user -TargetPath "OU=RegularUsers,DC=domain,DC=com" } # Retrieve all users in the new OU $movedUsers = Get-ADUser -SearchBase "CN=Users,DC=domain,DC=com" -SearchScope OneLevel -Filter '*' foreach($user in $movedUsers){ # Test if Display Name and object Name is the same, if not - rename if($user.DisplayName -ne $user.Name) { Rename-ADObject $user -NewName "$($user.DisplayName)" } }
首先,您也可以突出显示ADUC中的所有用户帐户,然后将它们拖放到另一个位置。
对象的CN / DN并不是全部相关的,因为它只在AD内部和LDAP查询中使用; 最终用户(和pipe理员)很less能够看到它。 当移动对象时,它实际上会自行更改,因为它包含对象的完整LDAPpath。
如果你想标准化,这可以做到没有任何副作用; 用户实际上唯一关心的是他们的login名,只要你不改变它 ,他们将继续照常login。
要更改它,可以使用ADUC控制台或PowerShell命令Rename-ADObject 。
dsmove命令应该能够为您更改规范名称。 我已经在testing环境中完成了这个工作,但从来没有在现场环境中使用,所以我build议谨慎行事。
此外,半相关,我会build议实施另一个域控制器,以避免头痛,如果你唯一的DC下降。