【发布时间】:2021-04-08 19:43:43
【问题描述】:
由于最近组织标准发生了一些变化,我不得不更新我所在位置的用户 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)\Desktop\sAMAccUpdate.csv" -NoTypeInformation -Append
}
else
{
Write-Host $memberName + ": Member sAMAccountName has already been updated." -ForegroundColor Yellow | Export-CSV -Path "C:\Users\(me)\Desktop\sAMAccUpdate.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)\Desktop\sAMAccUpdate.csv" -NoTypeInformation -Append
}
}
最初的if 语句完全按照我的意愿运行,Write-Host 也是如此。然而,之后的Export-CSV,虽然它至少创建了 CSV 文件,但并没有在其中放入任何内容。此外,即使在连续运行几次之后,这基本上会强制产生“else”结果,因为我的 sAMAccountName 已经更新,因此不满足 if 语句中的 -ne 参数,我不明白来自Write-Host 的任何输出,并且没有任何内容进入 CSV——尽管如果它不存在,它会创建它。
我尝试将 else 语句更改为 elseif($user.sAMAccountName -eq $newPre2K),结果是一样的:Write-Host 中没有任何内容,CSV 中没有任何内容。我已经尝试完全删除Try...Catch 以及将其放在初始if 中,但仍然没有任何变化。我尝试将Write-Host/Export-CSV 与Write-Output/Out-File 交换,但这也没有给我任何帮助。
如果有人能帮我找出我所犯的可能非常明显的错误,对于else/elseif 声明和Write-Host/Export-CSV 部分,我将不胜感激。
【问题讨论】:
-
Write-Host默认不输出到成功流。因此,没有任何内容可以通过管道传输到Export-Csv。 -
您的错误在这里
$user.sAMAccountName = $newPre2K。试试这个Set-ADUser -Identity $user -SamAccountName $newPre2K -
@SantiagoSquarzon 查看我发布的答案;代码完全按照我的预期工作;
else声明“不起作用”的原因纯粹是用户错误。 -
我很确定你会通过尝试
$user.sAMAccountName = $newPre2K得到一个System.Management.Automation.RuntimeException例外,但适合你自己。 -
否定。当我说代码按预期工作时,我的意思是它可以正常工作。只要我不破坏自己,就是这样。但是,出于好奇,什么会导致该错误发生?这是您的猜测,还是您自己尝试做类似的事情并得到了错误?
标签: powershell if-statement active-directory try-catch