我的目标是为一个 AD 组中的所有用户更改 Active Directory 中的“preferredLanguage”属性。
我在两行单独的行中执行以下代码:
$Users_UK = Get-AdGroupMember -identity "AD-Group-UK"
Get-ADUser $Users_UK -Properties preferredLanguage | Set-ADUser -Replace @{preferredLanguage = "en"}
但是,第二行生成错误,我找不到确切的原因:
Get-ADUser : Cannot convert 'System.Object[]' to the type 'Microsoft.ActiveDirectory.Management.ADUser' required by parameter 'Identity'. Specified method is not supported.
At line:1 char:12
+ Get-ADUser $Users_UK -Properties preferredLanguage | Set-ADUser -Rep ...
+ ~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.GetADUser
该错误是因为您将多个组成员对象绑定到
-Identity
中的 Get-ADUser
参数,而该参数仅接受单个用户。管道应该可以解决您的问题:
$Users_UK = Get-AdGroupMember -identity "AD-Group-UK"
$Users_UK | Get-ADUser -Properties preferredLanguage |
Set-ADUser -Replace @{ preferredLanguage = "en" }
但是,如果您要不断更新该组的成员,我建议您只查询属于该组的成员并且他们的
preferredLanguage
不是 en
,这样您就可以避免额外的开销:
$groupDn = (Get-ADGroup 'AD-Group-UK').DistinguishedName
Get-ADUser -LDAPFilter "(&(memberOf=$groupDN)(!preferredLangauge=en))" |
Set-ADUser -Replace @{ preferredLanguage = 'en' }