我在主题中遇到类似的问题-如何将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)。其他值看起来也相同(除了它们的大写和小写可能不同)。