如何将CSV与AD用户进行比较并禁用非CSV用户?

时间:2015-04-28 19:03:29

标签: powershell csv active-directory

作为禁用用户的过程,我有一个CSV,其中用户由employeeID标识,而不是用户名。我需要循环并将CSV与AD用户进行比较,并且需要禁用不在CSV中的任何AD用户。这是我到目前为止所做的,但它不起作用。我承认我对powershell脚本仍然相当新,所以任何帮助都会非常感激。

Import-Module ActiveDirectory  

Import-Csv -Path c:\ADTerm.csv | foreach {Get-ADUser -filter * -SearchBase "ou=Test,ou=Logins,dc=domain,dc=com" -Identity $_.employeeID} | Where {$_ -ne $null} | Disable-ADAccount -Identity $_.employeeID

1 个答案:

答案 0 :(得分:2)

我不能把它全部放在评论中,如果它看起来不太可怕,那么让我们从这开始吧。

您正在组合-Filter-Identity,这很可能不会影响您正在寻找的结果。使用Identity可以获取一个特定用户或过滤器以获得一对多。查看TechNet for Get-AdUser,您将看到Identity仅将值匹配为:

  
      
  • 的distinguishedName
  •   
  • objectGUID
  •   
  • 的objectSID
  •   
  • sAMAccountName赋
  •   

在这方面,我看到你有EmployeeID的专栏。我猜这些不是SamAccountName,这是-Identity支持的值之一。我觉得你可以做以下的改变。

$IDs = Import-Csv -Path c:\ADTerm.csv | Select-object -ExpandProperty EmployeeID
Get-ADUser -filter * -SearchBase "ou=Test,ou=Logins,dc=domain,dc=com" -Properties EmployeeID | 
        Where-Object{$_.EmployeeID -and ($IDs -notcontains $_.EmployeeID)} | Disable-ADAccount

更新get-aduser以获取该OU中的所有用户。 Get-Aduser默认情况下不会返回EmployeeID,因此我们使用-Properties来指定它。过滤所有具有employeeID但不在列表中的用户的用户。 Disable-ADAccount会很好地获取Get-AdUser的输出,因此无需再次指定帐户。

可能会将此值存储为AD中的EmployeeNumber。这还取决于您的csv文件是否包含EmployeeNumber