根据 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)'"
这确实有效,所以我确信我的格式有效。至此,我退出,祝你好运。
我正在尝试根据员工编号的 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
"'$(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)'"
这确实有效,所以我确信我的格式有效。至此,我退出,祝你好运。