【发布时间】:2021-12-23 05:40:48
【问题描述】:
PowerShell 初学者在这里。到目前为止享受它!
我有一个需要与 AD 进行比较的用户列表。我创建了一个脚本来为每个用户搜索 Get-ADUser Name 和 EmailAddress,使用 Divisions 数组作为过滤器。
如果找到 AD 用户,则找到 write-host 用户,显示名称、电子邮件地址!很简单。
如果未找到 AD 使用,则继续循环遍历所有分区,直到最后一个分区,如果在任何分区中未找到,则仅打印一次“用户未在 AD 中找到”
我一直在玩各种 Do-While、Do-Until 循环和 If-ElseIf 语句,但我无法弄清楚如果在任何语句中都没有找到它只报告 ONCE分工。
$Divisions="1","2","3"
$lastd = $Divisions | Select-Object -Last 1
Foreach ($d in $Divisions){
$aduser = Get-ADUser -Filter "Surname -like '*$lastname' -and GivenName -like '$givenname*'`
-and Enabled -eq '$True' -and Division -eq '$d'"`
-SearchBase "OU" -Properties Name, Division, EmailAddress |Select-Object Name,Division,EmailAddress
if(!$aduser){
write-host "Usernotfound"
}
if($aduser -eq ""){
write-host "user not found in AD" `n
}
else{
write-host "User Found in $d :" $aduser.Name $aduser.EmailAddress -F Green `n
}
}
这是我运行脚本时的示例结果。
USER1 - account will be terminated in 35 days; Last signon activity 2 days ago
****Searching: Active Directory Information
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
User Found in Division1! Name EmailAddress
USER2 - account will be terminated in 43 days; Last signon activity 4 days ago
****Searching: Active Directory Information
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
Usernotfound
User Found in Division2! Name EmailAddress
Usernotfound
Usernotfound
Usernotfound
如何才能做得更好?
【问题讨论】:
-
如果 Get-ADUser 在某个
SearchBase中找不到用户,那么在同一个 OU 中一次又一次地尝试找到该用户是没有意义的,希望您能找到他/她只是Division属性的变化.. -
嘿,Theo,根据你的评论,我取出了 -Searchbase 参数——得到了完全相同的结果。
标签: powershell if-statement foreach active-directory get-aduser