首页 > 解决方案 > 确认subOU是否已经存在?

问题描述

您好,我正在尝试创建一个创建子 OU 的脚本,在我插入 if 语句之前一切正常。如果 OU' 已经存在,我希望脚本编写警告。我认为错误在 if 语句中,并尝试了不同的方法无济于事。有人有什么好主意吗?谢谢。

New-ADOrganizationalUnit -Name "ou1" -Path "OU=mylab,DC=mylab,DC=local"
New-ADOrganizationalUnit -Name "ou2" -Path "OU=mylab,DC=mylab,DC=local"
New-ADOrganizationalUnit -Name "ou3" -Path "OU=mylac,DC=mylab,DC=local"

$ou1 = Get-ADOrganizationalUnit -Filter 'Name -like "ou1"'
$ou2 = Get-ADOrganizationalUnit -Filter 'Name -like "ou2"'
$ou3 = Get-ADOrganizationalUnit -Filter 'Name -like "ou3"'
$ouall = $ou1, $ou2, $ou3
$ouall

foreach ($ou in $ouall){
    If(Get-ADOrganizationalUnit -Filter "Name -eq '$ou'" -ErrorAction SilentlyContinue){
        Write-Warning "This Ou already exists"
    }
    Else{
        Write-Host $ou.DistinguishedName
        New-ADOrganizationalUnit -Name "Users" -Path $ou.DistinguishedName
        New-ADOrganizationalUnit -Name "Computers" -Path $ou.DistinguishedName
    }
}

标签: powershell

解决方案


这可以简化很多。如果他们确实进入了相同的根路径,那么我就是这样做的。我认为不需要获取现有 OU 的专有名称,因为您仅在它们不存在时才创建它们,并且它们本身不会被创建。

$ous = "ou1","ou2","ou3"

$ous | ForEach-Object {
    If(Get-ADOrganizationalUnit -Filter "Name -eq '$_'" -ErrorAction SilentlyContinue){
        Write-Warning "OU $_ already exists"
    }
    else{
        Write-host creating OU $_
        New-ADOrganizationalUnit -Name $_ -Path "OU=mylab,DC=mylab,DC=local"
    }
}

之前的 if 语句中的主要问题是您正在检查 name -eq $ou 其中 $ou 将是 OU 对象,而不是名称。


推荐阅读