Powershell:如何根据每个用户的 AD 组成员身份在本地 Active Directory 中设置“首选语言”?

问题描述 投票:0回答:1

我的目标是为一个 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
powershell active-directory attributes
1个回答
0
投票

该错误是因为您将多个组成员对象绑定到

-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' }
© www.soinside.com 2019 - 2024. All rights reserved.