【问题标题】:How to clean up results of a Powershell script如何清理 Powershell 脚本的结果
【发布时间】: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


【解决方案1】:

由于您的 foreach 循环似乎只适用于 单个 用户(同时在多个部门中反复寻找该用户),您可以简单地将未找到的测试移至 循环之后:

foreach ($d in $Divisions) {
    $aduser = 
      Get-ADUser -Filter "Surname -like '*$lastname' -and GivenName -like '$givenname*' -and Enabled -eq 'True' -and Division -eq '$d'" -Properties Name, Division, EmailAddress |
        Select-Object Name,Division,EmailAddress
    if ($adUser) {
      Write-Host "User Found in $d :" $aduser.Name $aduser.EmailAddress -F Green `n
      break # Presumably you needn't keep searching.
    }
}

if (-not $aduser) {
  Write-Host "Usernotfound"
}

【讨论】:

  • 谢谢,mklement()!对!就是这样——结合使用 BREAK 和在 foreach 循环之后移动 -not 测试。太棒了!
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多