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

如何修改PowerShell OU脚本,实现子OU存在性检查并独立创建?

问题需求

原PowerShell脚本可基于CSV文件在MyLab OU下创建指定OU,同时为每个新建OU生成Department1、Department2两个子OU,且能检查CSV中的OU是否存在并输出提示。

需修改实现:对子OU单独做存在性校验——若其中一个子OU已存在,另一个仍可正常创建,不会因单个子OU存在而跳过全部子OU的创建流程。


修改后的脚本

# 导入CSV文件
$MyOUs = Import-Csv C:\OUs.csv -Delimiter ","

# 设定父OU的基础路径
$ParentPath = "OU=MyLab,DC=MyLab,DC=local"

# 遍历CSV中的每个OU条目
foreach ($OU in $MyOUs) {
    $ouName = $OU.Name 
    # 精准检查当前OU是否在MyLab下已存在(优化查询效率)
    $targetParentOU = Get-ADOrganizationalUnit -Filter "Name -eq '$ouName'" -SearchBase $ParentPath -SearchScope OneLevel -ErrorAction SilentlyContinue

    if ($targetParentOU) {
        Write-Host "提示:$ouName OU 已存在"
        # 父OU存在时,检查并补全缺失的子OU
        $subOUParentPath = "OU=$ouName,$ParentPath"
        $subOUList = "Department1", "Department2"
        
        foreach ($subOU in $subOUList) {
            # 检查当前子OU是否已存在
            $existingSubOU = Get-ADOrganizationalUnit -Filter "Name -eq '$subOU'" -SearchBase $subOUParentPath -SearchScope OneLevel -ErrorAction SilentlyContinue
            if ($existingSubOU) {
                Write-Host "提示:子OU $subOU 在 $ouName 下已存在"
            }
            else {
                New-ADOrganizationalUnit -Name $subOU -Path $subOUParentPath -ProtectedFromAccidentalDeletion $false
                Write-Host "已创建:子OU $subOU 在 $ouName 下"
            }
        }
    }
    else {
        # 创建父OU
        New-ADOrganizationalUnit -Name $ouName -Path $ParentPath -ProtectedFromAccidentalDeletion $false
        Write-Host "已创建:OU $ouName"
        
        # 检查并创建子OU
        $subOUParentPath = "OU=$ouName,$ParentPath"
        $subOUList = "Department1", "Department2"
        
        foreach ($subOU in $subOUList) {
            $existingSubOU = Get-ADOrganizationalUnit -Filter "Name -eq '$subOU'" -SearchBase $subOUParentPath -SearchScope OneLevel -ErrorAction SilentlyContinue
            if ($existingSubOU) {
                Write-Host "提示:子OU $subOU 在 $ouName 下已存在"
            }
            else {
                New-ADOrganizationalUnit -Name $subOU -Path $subOUParentPath -ProtectedFromAccidentalDeletion $false
                Write-Host "已创建:子OU $subOU 在 $ouName 下"
            }
        }
    }
}

关键修改说明

  • 优化父OU查询效率:原脚本遍历所有OU做匹配,改为通过-SearchBase限定查询范围、-SearchScope OneLevel仅查直接子节点,配合Filter精准定位,同时用-ErrorAction SilentlyContinue避免OU不存在时抛出错误。
  • 子OU独立校验逻辑:将子OU的处理逻辑从“仅父OU新建时执行”调整为“无论父OU是否存在都执行”,且对每个子OU单独做存在性判断:
    • 先查询目标子OU是否在对应父OU下存在
    • 存在则输出提示,不存在则执行创建操作
  • 统一逻辑避免重复:父OU存在/不存在两种场景下,子OU的检查和创建逻辑完全一致,保证代码可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:09