根据 csv 文件中的 employeeID 移动 AD 用户

Move AD user based on their employeeID in csv file

我正在尝试根据员工编号的 CSV 文件将 AD 用户移动到不同的 ou。我四处搜索,找到了一个建议并尝试了这个代码:

Import-Module ActiveDirectory

$TargetOU = "OU=Math,OU=Students,DC=domain,DC=net"
$IDs = Import-CSV "c:\testids.csv" | Select -ExpandProperty employeeID
Get-ADUser -filter * -Properties employeeID | Where { $IDs -contains $_.employeeID } | 
Move-ADObject -TargetPath $TargetOU

我的 csv 文件如下所示

employeeID
11111
22222
33333

它运行没有错误。但是用户永远不会移动。我是 运行 服务器 2012R2。

有什么建议吗?我是在错误的轨道上还是完全偏离了左场?

试试这个

Import-Module ActiveDirectory

$TargetOU = "OU=Math,OU=Students,DC=domain,DC=net"

$IDs = Import-CSV "c:\testids.csv" | Select employeeID

$IDs | % { Get-ADUser -Filter { employeeID -eq $_.employeeID } -Property employeeID |
Move-ADObject -TargetPath $TargetOU }

抱歉,我 'Enter' 推得太快了。这会在您开始之前将您的 CSV 保存为 $IDs 对象。我认为你的管道有点出问题了。让我知道这是否有效,如果无效,我会再试一次。

好的,我想确保您首先找到正确的用户。理论上 Move-ADObject 没有得到任何输入。

首先我会检查 CSV 文件的内容。

Get-Content "c:\testids.csv" | Select -Skip 1 | ForEach-Object{"'$_'"}

然后假设它正在工作,这个命令的结果是什么?

$IDs | ForEach-Object{Get-ADUser -Filter  "employeeID -eq '$_'" -Property employeeID 

根据评论更新

我现在想知道您是否看错了 AD 属性。也许应该是 EmployeeNumber.

$IDs | ForEach-Object{Get-ADUser -Filter  "employeeNumber -eq '$_'" -Property employeeNumber 

试一试,看看这是否是您需要的?

还应尝试验证您在实际 employeeid

中没有白色-space 或特殊字符
"'$(Get-Aduser accountthathasid -properties employeeid | select -expand employeeid)'"

我敢打赌,您 运行 遇到的整个问题是 Get-ADUser 没有返回任何用户对象。

<Previous answer removed>

编辑: 好吧,我放弃了,这毫无意义。我现在无法通过 EmployeeID 查找自己的用户。我认为按 employeeID 搜索可能存在一些问题,因为这 returns nothing:

$me = get-aduser $env:USERNAME -Properties EmployeeID
Get-ADUser -filter "EmployeeID -eq '$($me.EmployeeID)'" -Properties EmployeeID

我确认 $me 确实包含我的 ADUser 对象信息,包括我的 EmployeeID。我试过了:

Get-ADUser -filter "UserPrincipalName -eq '$($me.UserPrincipalName)'"

这确实有效,所以我确信我的格式有效。至此,我退出,祝你好运。