如何将AD空属性与CSV空属性进行比较

时间:2018-06-29 12:01:13

标签: powershell csv active-directory

我在主题中遇到类似的问题-如何将AD空属性与CSV空属性进行比较?

我使用从CSV文件导入的值更新用户的AD帐户属性。 如果未在CSV中指定属性值-为空,则会出现问题。 例如,假设它是一个City属性。

对于第一次广告更新,在CSV中更改属性值后,我使用 Set-AdUser -Clear l ,因为似乎“替换”选项不适用于空值。它使广告中的属性值$ null。

当我第二次运行脚本时,通过此比较-($UserWzor.City -ne $UserAD.l)仍然认为AD和CSV中的属性不相等。 这会导致一次比较所有属性失败-

if (($(($UserAD.sAMAccountName).length) -eq 4) -and (($UserWzor.Surname -ne ($UserAD.sn -replace '[ ]\d+$')) -or ($UserWzor.GivenName -ne $UserAD.GivenName) -or ($UserWzor.City -ne $UserAD.l) -or ($UserWzor.Title -ne $UserAD.Title) -or ($UserWzor.Company -ne $UserAD.Company) -or ($UserWzor.Department -ne $UserAD.Department) -or ($UserWzor.StreetAddress -ne $UserAD.StreetAddress) -or ($UserWzor.Office -ne $UserAD.Office) -or ($UserWzor.OfficePhone -ne $UserAD.OfficePhone) -or ($UserWzor.Manager -ne $Manager.sAMAccountName))){
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Surname' -MaByc $UserWzor.Surname -Jest ($UserAD.sn -replace '[ ]\d+$') -WlasciwoscAD Surname
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'GivenName' -MaByc $UserWzor.GivenName -Jest $UserAD.GivenName -WlasciwoscAD GivenName
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Title' -MaByc $UserWzor.Title -Jest $UserAD.Title -WlasciwoscAD Title
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Company' -MaByc $UserWzor.Company -Jest $UserAD.Company -WlasciwoscAD Company
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Department' -MaByc $UserWzor.Department -Jest $UserAD.Department -WlasciwoscAD Department
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'City' -MaByc $UserWzor.City -Jest $UserAD.l -WlasciwoscAD l
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'StreetAddress' -MaByc $UserWzor.StreetAddress -Jest $UserAD.StreetAddress -WlasciwoscAD StreetAddress
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Office' -MaByc $UserWzor.Office -Jest $UserAD.Office -WlasciwoscAD physicalDeliveryOfficeName
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'OfficePhone' -MaByc $UserWzor.OfficePhone -Jest $UserAD.OfficePhone -WlasciwoscAD telephoneNumber
    PorownajIZmienWartosc -Konto $UserAD.sAMAccountName -WlasciwoscLDAP 'Manager' -MaByc $UserWzor.Manager -Jest $Manager.sAMAccountName -WlasciwoscAD Manager
}

,我必须分别检查每个属性。 CSV文件中的多个属性可能会出现空值。
是否应该在这行 if 语句中检查每个属性的$ null和空白值?
我编写了一个函数来更改AD。它认识到值是相同的,最后不要尝试更改AD。代码如下所示(其中$ MaByc是CSV中的值,而$ Jest是AD属性值)。

function PorownajIZmienWartosc ($Konto, $WlasciwoscLDAP, $WlasciwoscAD, $MaByc, $Jest) {
if (($MaByc -ne $Jest) -and (!((($MaByc -eq $null) -or ($MaByc -eq "")) -and (($Jest -eq $null) -or ($Jest -eq ""))))) {
    if (($MaByc -eq $null) -or ($MaByc -eq "") -or ($MaByc.length -lt 1)) {
        Set-ADUser -Identity $Konto -PassThru -Server $DC -Clear $WlasciwoscAD #-WhatIf
    }
    elseif ($WlasciwoscLDAP -eq "Manager" -and $MaByc.length -eq 4) {
        $Szef = Get-ADUser -Filter "sAMAccountName -eq '$MaByc'" -Server $DC -SearchBase $SzukajOd
        Set-ADUser -Identity $Konto -PassThru -Server $DC -Manager $Szef #-WhatIf
    }
    else {
        try {
            Set-ADUser -Identity $UserWzor.sAMAccountName -PassThru -Server $DC -Replace @{ $WlasciwoscLDAP = $MaByc } #-WhatIf
        }
        catch {
            "  -  Blad Set-ADUser" | Out-File $Bledy -Encoding UTF8 -Append -Force -NoNewline
        }
    }
    "`r`n" | Out-File $Bledy -Encoding UTF8 -Append -Force
}

我尝试用$ null-if (($Linia.City).length -lt 1){ $Linia.City = $null }-替换CSV中的空值,但无效( $ Linia 是CSV文件中的一行)。

当我调试脚本时,可以在调试器变量窗口中看到,当CSV属性值仍为空白时,AD属性值为$ null。 Debugger Watch窗口显示为(Empty)。其他值看起来也相同(除了它们的大写和小写可能不同)。

0 个答案:

没有答案