You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建最长12字符的SamAccountName:姓氏前11位+名字首字母

解决PowerShell创建AD用户时SamAccountName的长度限制规则问题

需求回顾

创建用户时,SamAccountName需满足:

  • 最长12字符
  • 规则为姓氏最多取前11个字符,加上名字的首字母
  • 若该账号名已存在,需追加序号,且追加后仍不超过12字符限制

修改后的完整脚本

$OU = "OU=Users,DC=domain,DC=com"
$PW = "Welcome$(Get-Random -minimum 0001 -maximum 9999)!"

$FirstName = Read-Host "请输入新用户的名字"
$LastName  = Read-Host "请输入新用户的姓氏"

# 处理姓氏:最多取前11个字符
$maxLastNameLength = 11
$shortLastName = if ($LastName.Length -gt $maxLastNameLength) {
    $LastName.Substring(0, $maxLastNameLength)
} else {
    $LastName
}

# 生成基础SamAccountName:短姓氏 + 名字首字母
$AccountName = $shortLastName + $FirstName[0]

# 检查账号是否存在,若存在则追加序号(确保总长度不超过12)
$count = 1
while (Get-ADUser -Filter "SamAccountName -eq '$AccountName'") {
    # 计算序号的位数,确定姓氏可保留的最大长度
    $countDigits = $count.ToString().Length
    $availableLastNameLength = 11 - $countDigits
    $adjustedLastName = if ($LastName.Length -gt $availableLastNameLength) {
        $LastName.Substring(0, $availableLastNameLength)
    } else {
        $LastName
    }
    # 生成带序号的账号名,总长度=adjustedLastName长度 + 1(首字母) + countDigits ≤ 12
    $AccountName = '{0}{1}{2}' -f $adjustedLastName, $FirstName[0], $count++
}

$UPN = "$($FirstName).$($LastName)@domain.com"
# 处理UPN重复的情况
$count = 1
while (Get-ADUser -Filter "UserPrincipalName -eq '$UPN'") {
    $UPN = '{0}.{1}{2}@domain.com' -f $FirstName, $LastName, $count++
}

# 创建参数哈希表
$userParams = @{
     Name                         = "$($LastName), $($FirstName)"
     DisplayName                  = "$($LastName), $($FirstName)"
     FirstName                    = $FirstName
     LastName                     = $LastName
     SamAccountName               = $AccountName
     OnPremisesOrganizationalUnit = $OU
     UserPrincipalName            = $UPN
     Password                     = $PW | ConvertTo-SecureString -AsPlainText -Force
     ResetPasswordOnNextLogon     = $true
     Archive                      = $true
}

# 创建远程邮箱用户
try {
    New-RemoteMailbox @userParams -ErrorAction Stop
}
catch {
    Write-Error $_.Exception.Message
}

关键修改说明

  1. 姓氏截取处理

    • 定义$maxLastNameLength = 11,通过判断姓氏长度,截取前11个字符作为$shortLastName,确保后续组合名字首字母后总长度不超过12。
  2. 重复账号名的序号追加逻辑

    • 当基础账号名存在时,计算当前序号的位数(如count=1是1位,count=10是2位)
    • 动态调整姓氏可保留的长度:11 - 序号位数,这样姓氏+首字母+序号的总长度始终≤12(比如序号是2位时,姓氏取前9位,9+1+2=12)
    • 重新生成符合长度限制的带序号账号名,避免因追加序号导致超过12字符上限。

内容的提问来源于stack exchange,提问作者ak2595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:41:01