Powershell:尝试更新 OU 中的所有 sAMAccountNames;超过初始"if"的任何内容都不起作用



由于组织标准最近发生了一些变化,我不得不更新我所在位置的用户OU中每个用户的sAMAccountName。我已经编写并运行了代码,并多次针对自己的帐户进行测试,但在else、Write Host和Export CSV命令中遇到了一致的问题。

$OU = 'users ou'
$users = Get-ADObject -Filter * -SearchBase $OU -Properties sn,givenName,userPrincipalName,sAMAccountName,employeeType
$newPre2K = ''
$memberName = ''
foreach($user in $users)
{
$memberName = $user.sn + ", " + $user.givenName
$newPre2K = (($user.userPrincipalName).Split(".")[0]) + $user.employeeType
Try
{        
if($user.sAMAccountName -ne $newPre2K)
{
$user.sAMAccountName = $newPre2K
Set-ADObject -Instance $user 
Write-Host $memberName + ": sAMAccountName change successful." -ForegroundColor Green | Export-CSV -Path "C:Users(me)DesktopsAMAccUpdate.csv" -NoTypeInformation -Append
}
else
{
Write-Host $memberName + ": Member sAMAccountName has already been updated." -ForegroundColor Yellow | Export-CSV -Path "C:Users(me)DesktopsAMAccUpdate.csv" -NoTypeInformation -Append
}
}
Catch
{
Write-Host $memberName + ": Unknown Error. Review CSV to identify failed changes and attempt to remediate." -ForegroundColor Red | Export-CSV -Path "C:Users(me)DesktopsAMAccUpdate.csv" -NoTypeInformation -Append
}
}

初始的if语句和Write-Host语句的功能完全一样。然而,Export-CSV之后,虽然它至少创建了CSV文件,但没有在其中放入任何内容;否则";结果,因为我的sAMAccountName已经更新,因此没有满足if语句中的-ne参数,所以我没有从Write-Host获得任何输出,也没有任何东西进入CSV——尽管如果它还不存在,它确实会创建它。

我尝试将else语句更改为elseif($user.sAMAccountName -eq $newPre2K),结果是一样的:Write-Host中没有任何内容,CSV中也没有任何内容。我尝试了完全删除Try...Catch,并将其放置在初始if中,但仍然没有任何变化。我试过用Write-Output/Out-File交换Write-Host/Export-CSV,但这也没有给我任何帮助。

如果有人能帮我找出我在else/elseif声明和Write-Host/Export-CSV文章中可能犯的非常明显的错误,我将不胜感激

我是对的,很明显我错过了一些东西。

当我针对自己的帐户测试代码时,我在$users = Get-ADObject -Filter * ...-Filter参数中指定了自己。然而,else语句";不起作用";纯粹是因为我没有在参数中更改我的sAMAccountName以反映它已经更改的事实,所以它在寻找一个根本不存在的对象。显然,如果你特别告诉程序要寻找的东西已经不存在,程序就无法告诉你某个东西是否已经改变。

至于Write-Host/Export-CSV的作品,我刚刚用Write-Output/Out-File做了一次,现在它有效了。以前没有,所以我一定是搞砸了什么,但我不确定是什么。

最新更新