Active Directory 用户名:为什么规范名称会有所不同?我可以做些什么让他们统一吗?

evi*_*ons 10 windows-server-2003 active-directory windows-server-2008-r2

我是工作 Active Directory 网络的自学管理员,该网络用于在 ~30 台 PC 上登录 Windows。我从其他人那里继承了这个系统,他也没有接受过任何直接的 Microsoft 培训,因此我对一些事情一无所知。

网络本身有一台 Windows Server 2008 R2 机器充当域控制器、DNS、文件共享等。登录工作正常,但我在禁用旧帐户的同时浏览用户列表,我注意到一些我不太明白的事情.

以下是几个示例用户帐户:

  1. 登录名:john
    名字:John
    姓氏:Smith
    显示名称:John Smith
    对象的规范名称:domain.com/Users/john

  2. 登录名:bob
    名字:Bob
    姓氏:法语
    显示名称:Bob 法语
    对象的规范名称:domain.com/Users/Bob French

当前的域控制器是从另一个用于运行 Windows Server 2003 的域控制器换入的。第一个示例帐户是在 Server 2003 框为 DC 时创建的,第二个示例帐户是在较新的 Server 2008 R2 框为 DC 时创建的。为什么规范名称不同,它有什么不同吗?

我最恼火的是,我在活动目录浏览器中的用户列表有一半是“名字”,一半是“名字姓氏”。

我可以做些什么来使所有这些都相同而不破坏工作帐户吗?

Mat*_*sen 8

Active Directory 并不真正关心用户帐户对象的 RDN(规范名称的最后一部分)如何与其他属性(如显示名称或登录名称)相关 - 只要每个单独属性的值不违反模式定义。

Active Directory 用户和计算机(以及许多其他对话)中“新用户”表单的行为在 Windows Server 2003 和 Windows Server 2008 R2 之间发生了显着变化 - 这可能就是它们不一致的原因

您可以使用 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)" 
    }
}
Run Code Online (Sandbox Code Playgroud)

第一步,您还可以突出显示 ADUC 中的所有用户帐户,然后将它们拖放到另一个位置。