我试图根据员工编号的CSV文件将AD用户移动到不同的用户。我已经四处搜索了,我找到了一个建议并尝试了这段代码:
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
它运行没有错误。但用户永远不会动。我正在运行Server 2012R2。
有什么建议吗?我是在错误的轨道上还是在左侧场地完全离开?
答案 0 :(得分:3)
试试这个
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 }
抱歉,我太快推了'回车'。这会在您开始之前将CSV保存为$ ID对象。我觉得你的管道有点乱。让我知道这是否有效,如果没有,我会再试一次。
答案 1 :(得分:0)
好的,我想要确保您首先找到正确的用户。理论是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
"'$(Get-Aduser accountthathasid -properties employeeid | select -expand employeeid)'"
答案 2 :(得分:0)
我愿意打赌你遇到的整个问题是Get-ADUser没有返回任何用户对象。
<Previous answer removed>
编辑:好的,我放弃,这没有任何意义。我现在找不到自己的用户,通过EmployeeID查找它。我认为可能存在一些按employeeID搜索的问题,因为这不会返回任何内容:
$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)'"
这确实有效,所以我确信我的格式有效。此时,我退出并祝你好运。