作为禁用用户的过程,我有一个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
答案 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