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

混合环境下基于Exchange脚本实现符合命名规则的本地用户创建

完善混合环境下创建本地Exchange用户的PowerShell脚本

需求说明

  • SamAccountName格式为「姓氏+名字首字母」,若该账号已存在,则在末尾添加数字(例如King, John对应SamAccountName为KingJ1,若已存在则为KingJ2……)
  • UPN格式为「名字.姓氏@contoso.com」,若该UPN已存在,则在姓氏后添加数字(例如King, John对应UPN为john.king1@contoso.com,若已存在则为john.king2@contoso.com……)

完善后的完整脚本

# 连接Exchange Online(若无需连接可注释此行)
Connect-ExchangeOnline

# 获取本地Exchange凭据
$UserCredential = Get-Credential

# 建立本地Exchange 2016会话(替换<Exchange2016服务器FQDN>为实际服务器地址)
$SessionEX2016 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Exchange2016服务器FQDN>/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $SessionEX2016 -DisableNameChecking

# 获取用户基本信息
$FirstName = Read-Host "请输入名字"
$LastName = Read-Host "请输入姓氏"
$Manager = Read-Host "请输入经理的登录ID"
$Name = "$LastName, $FirstName"
$DisplayName = $Name
$PW = "Welcome$(Get-Random -Minimum 0001 -Maximum 9999)!"
$defaultOU = "OU=Users,OU=Accounts,DC=contoso,DC=com" # 默认用户创建OU

# --------------------------
# 自动生成符合规则的SamAccountName
# --------------------------
$baseSam = "$LastName$($FirstName[0])"
$samCounter = 1
$samAccountName = "$baseSam$samCounter"
# 循环检查AD中是否存在同名账号,存在则递增数字
while (Get-ADUser -Filter "SamAccountName -eq '$samAccountName'" -ErrorAction SilentlyContinue) {
    $samCounter++
    $samAccountName = "$baseSam$samCounter"
}

# --------------------------
# 自动生成符合规则的UPN
# --------------------------
$baseUpnPrefix = "$FirstName.$LastName"
$upnCounter = 1
$upn = "$baseUpnPrefix$upnCounter@contoso.com"
# 循环检查AD中是否存在相同UPN,存在则递增数字
while (Get-ADUser -Filter "UserPrincipalName -eq '$upn'" -ErrorAction SilentlyContinue) {
    $upnCounter++
    $upn = "$baseUpnPrefix$upnCounter@contoso.com"
}

# --------------------------
# 创建本地远程邮箱用户
# --------------------------
New-RemoteMailbox -Name $Name -FirstName $FirstName -LastName $LastName `
    -SamAccountName $samAccountName -OnPremisesOrganizationalUnit $defaultOU `
    -UserPrincipalName $upn -Password (ConvertTo-SecureString -AsPlainText $PW -Force) `
    -ResetPasswordOnNextLogon:$true -Archive

# --------------------------
# 将用户移动到经理所在OU
# --------------------------
if ($Manager) {
    try {
        $managerADObj = Get-ADUser -Identity $Manager -ErrorAction Stop
        $managerOU = ($managerADObj.DistinguishedName -split '(?<!\\),', 2)[-1]
        $newUserADObj = Get-ADUser -Identity $samAccountName -ErrorAction Stop
        $newUserADObj | Move-ADObject -TargetPath $managerOU -ErrorAction Stop
        Write-Host "用户已成功移动到经理所在OU: $managerOU"
    }
    catch {
        Write-Warning "移动用户到经理OU失败: $_"
    }
}

# 清理本地Exchange会话
Remove-PSSession $SessionEX2016

关键逻辑说明

  1. 自动生成账号与UPN:取消手动输入登录ID的步骤,脚本根据姓氏+名字首字母生成初始SamAccountName,根据「名字.姓氏」生成初始UPN前缀
  2. 存在性检查与递增:通过循环查询AD对象,若目标账号或UPN已存在,则自动在末尾添加递增数字,直到生成唯一值
  3. OU迁移容错处理:添加try-catch块处理经理ID无效、用户查询失败等异常,避免脚本直接中断
  4. 会话资源清理:脚本末尾添加本地Exchange会话的清理操作,避免残留会话占用系统资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:20:56