在Powershell中重命名AD用户对象名称

时间:2019-06-07 10:49:25

标签: powershell active-directory powershell-2.0

我试图仅获取类型为user的AD对象,然后遍历所有对象并更改AD用户对象名称。所以我做了以下事情:

$Users = Get-ADObject -Filter {(ObjectClass -eq "user")} # OR Get-ADObject -Filter 'ObjectClass -eq "user"'

$Users | foreach
{
    # Here code to create name based on conditions ($newUserObjectName)
    Rename-ADObject -Identity $_ -NewName $newUserObjectName
}

问题是Get-ADObject不仅返回用户,而且还返回计算机对象。...我只想要用户对象类。另外,我不确定通过将标识设置为$ _以便在迭代中更新当前用户,下面的代码行是否正确:

Rename-ADObject -Identity $_ -NewName $newUserObjectName

3 个答案:

答案 0 :(得分:2)

为什么不使用Get-ADUser而不是Get-ADObject并仅返回DistinguishedName?显然,不要只运行此代码:)

$users = (Get-ADUser -Filter *).DistinguishedName #This gets all the users in AD
Foreach($user in $users){
    Rename-ADObject -Identity $user -NewName $newUserObjectName
}

答案 1 :(得分:2)

Computer对象类是从User对象类派生的。因此,对用户类的查询将同时返回ComputersUsers。如果只想过滤用户,则必须将ObjectCategory指定为Person

$Users = Get-ADObject -Filter {(Objectclass -eq "user") -and (objectCategory -eq "Person")}

使用它,也可以使用古德勒Get-ADuser

答案 2 :(得分:0)

使用Get-ADUserSet-ADUser

$Users = Get-ADUser -Filter *
$Users | foreach {
    # Naming code
    Set-ADUser -Identity $_.SamAccountName -SamAccountName $newName
}

这会将所有用户身份替换为$newName

请注意,您可以将-SamAccountName替换为ADUser的任何其他属性。例如,如果您要替换显示名称,则可以使用-Name $newName