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

使用PowerShell创建AD用户:基于部门与位置配置多OU路径变量

AD用户创建脚本:结合部门与位置动态生成OU路径的优化方案

核心思路:用哈希表替代冗余的If-Else判断

原脚本的If-Else分支过多,新增位置或部门时需要大量修改代码。推荐用嵌套哈希表来映射「位置-部门」对应的OU结构,既简洁又易扩展。

方案实现步骤

  1. 定义OU映射规则
    先把不同位置的基础OU、各部门对应的OU名称整理成嵌套哈希表,后续新增位置/部门只需要在表中添加条目即可:
# 定义位置与部门的OU映射表
$ouMapping = @{
    "LDN" = @{
        DepartmentOUs = @{
            "IT" = "OU=IT"
            "Finance" = "OU=Finance"
            "Sales" = "OU=Sales"
            "HR" = "OU=HR"
            "Client Services" = "OU=Client Services"
        }
        BaseOU = "OU=London (LDN),OU=Europe,OU=Company Staffing,DC=testcompany,DC=local"
        DefaultOU = "OU=London (LDN),OU=Europe,OU=Company Staffing,DC=testcompany,DC=local"
    }
    "NY" = @{
        DepartmentOUs = @{
            "IT" = "OU=IT"
            "Finance" = "OU=Finance"
            # 可按需添加纽约其他部门的OU映射
        }
        BaseOU = "OU=New York (NY),OU=North America,OU=Company Staffing,DC=testcompany,DC=local"
        DefaultOU = "OU=New York (NY),OU=North America,OU=Company Staffing,DC=testcompany,DC=local"
    }
}
  1. 动态生成OU路径
    根据用户的$Office和$Department变量,从映射表中匹配对应的OU片段,拼接成完整路径:
# 先获取当前位置的映射配置
$locationConfig = $ouMapping[$Office]
if (-not $locationConfig) {
    # 如果位置未定义,默认用伦敦配置
    $locationConfig = $ouMapping["LDN"]
}

# 匹配部门对应的OU,不存在则用默认OU
$departmentOU = $locationConfig.DepartmentOUs[$Department]
if ($departmentOU) {
    $OU = "$departmentOU,$($locationConfig.BaseOU)"
} else {
    $OU = $locationConfig.DefaultOU
}
  1. 修正原脚本的语法问题
    原脚本存在两处错误:
  • 使用了中文引号(“IT”),PowerShell无法识别,需改为英文双引号"IT"
  • Sales和HR的OU路径里多了一个逗号(DC=testcompany,,DC=local),需删除多余逗号

完整修改后的脚本示例

# 定义OU映射表
$ouMapping = @{
    "LDN" = @{
        DepartmentOUs = @{
            "IT" = "OU=IT"
            "Finance" = "OU=Finance"
            "Sales" = "OU=Sales"
            "HR" = "OU=HR"
            "Client Services" = "OU=Client Services"
        }
        BaseOU = "OU=London (LDN),OU=Europe,OU=Company Staffing,DC=testcompany,DC=local"
        DefaultOU = "OU=London (LDN),OU=Europe,OU=Company Staffing,DC=testcompany,DC=local"
    }
    "NY" = @{
        DepartmentOUs = @{
            "IT" = "OU=IT"
            "Finance" = "OU=Finance"
        }
        BaseOU = "OU=New York (NY),OU=North America,OU=Company Staffing,DC=testcompany,DC=local"
        DefaultOU = "OU=New York (NY),OU=North America,OU=Company Staffing,DC=testcompany,DC=local"
    }
}

# 假设这里已获取用户的Office和Department变量(示例值)
$Office = "NY"
$Department = "IT"

# 生成OU路径
$locationConfig = $ouMapping[$Office] ?? $ouMapping["LDN"]
$departmentOU = $locationConfig.DepartmentOUs[$Department]
$OU = if ($departmentOU) { "$departmentOU,$($locationConfig.BaseOU)" } else { $locationConfig.DefaultOU }

# 创建AD用户
New-ADUser `
    -Department $Department `
    -Name "$Firstname $Surname" `
    -UserPrincipalName $UPN `
    -Path $OU `
    -GivenName $FirstName `
    -Surname $Surname `
    -SamAccountName "$FirstName.$Surname" `
    -AccountPassword (Read-Host -AsSecureString "Input User Password") `
    -ChangePasswordAtLogon $False `
    -Company "Test" `
    -Title $JobTitle `
    -EmailAddress "$FirstName.$Surname@testcompany.com" `
    -State ($Office -eq "LDN" ? "LDN" : "NY") `
    -Country ($Office -eq "LDN" ? "GB" : "US") `
    -Office $Office `
    -City ($Office -eq "LDN" ? "London" : "New York") `
    -DisplayName "$FirstName $Surname" `
    -Enabled $True

额外优化点

  • 可以把$ouMapping单独存成一个JSON配置文件,脚本运行时加载,实现配置与代码分离
  • 添加参数校验,比如当$Office或$Department为空时抛出提示,避免生成错误的OU路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:30:44