我试图仅获取类型为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
答案 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
对象类派生的。因此,对用户类的查询将同时返回Computers
和Users
。如果只想过滤用户,则必须将ObjectCategory
指定为Person
$Users = Get-ADObject -Filter {(Objectclass -eq "user") -and (objectCategory -eq "Person")}
使用它,也可以使用古德勒Get-ADuser
答案 2 :(得分:0)
使用Get-ADUser
和Set-ADUser
:
$Users = Get-ADUser -Filter *
$Users | foreach {
# Naming code
Set-ADUser -Identity $_.SamAccountName -SamAccountName $newName
}
这会将所有用户身份替换为$newName
。
请注意,您可以将-SamAccountName
替换为ADUser
的任何其他属性。例如,如果您要替换显示名称,则可以使用-Name $newName