我想为数组中的每个AD用户返回以分号分隔的列表中的组名。这是我到目前为止的内容:
$ADuser = Get-ADUser -filter * -Properties * | ? {$_.employeeNumber -eq " 9408" -or $_.employeeNumber -eq "3816"} | Select-Object Name,SamAccountName,UserPrincipalName,DisplayName,GivenName,Surname,description,mail,Enabled,HomeDirectory,distinguishedname,MemberOf
foreach($user in $ADuser)
{
$Groups = forEach ($group in $ADuser.memberOf)
{
(Get-ADGroup $group).name
}
$groupStr = $Groups -join ";"
$ADuser = $ADuser | Select-Object Name,SamAccountName,UserPrincipalName,DisplayName,GivenName,surname,description,mail,Enabled,HomeDirectory,distinguishedname,@{n='Groups';e={$groupStr}}
}
当$ADuser
包含一个用户时,此代码可以正常工作。当$ADuser
包含多个用户时,每次尝试设置Groups
时都会出现以下错误:
Get-ADGroup : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the command again.
At line:8 char:22
+ (Get-ADGroup $group).name
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-ADGroup],
ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroup
我希望每个$ADuser
的输出都这样:
Name : John.Doe
SamAccountName : John.Doe
UserPrincipalName : John.Doe@mydomain.com
DisplayName : John Doe
GivenName : John
Surname : Doe
description : Joe is a person
mail : John.Doe@mydomain.com
Enabled : True
HomeDirectory : \\fileserver\homefolders\John.Doe
distinguishedname : CN=John.Doe,OU=People,OU=my,DC=domain
Groups : Group1;Group2;Group3;Group4
答案 0 :(得分:1)
看起来您已经弄混了这两个变量: $ ADUsers 和 $ users 。
$ADuser = Get-ADUser -filter * -Properties * | ? {$_.employeeNumber -eq " 9408" -or $_.employeeNumber -eq "3816"} | Select-Object Name,SamAccountName,UserPrincipalName,DisplayName,GivenName,Surname,description,mail,Enabled,HomeDirectory,distinguishedname,MemberOf,Groups
$Results = New-Object System.Collections.ArrayList
foreach($user in @($ADuser))
{
$Groups = forEach ($group in @($user.memberOf))
{
(Get-ADGroup $group).name
}
$user.Groups = $Groups -join ';'
[Void]$Results.Add($user)
}
$Results
答案 1 :(得分:0)
Kirill Pashkov's helpful answer解决了您眼前的问题。
要退后一步:
您的症状表明您正在运行 PSv2 ,这具有以下含义:
成员枚举(PSv3 +)不可用;也就是说,如果$ADuser
是 array (一个集合),则不能使用.memberOf
隐式收集其 elements < / em>。
即使要枚举的值为.memberOf
,foreach (...) { ... }
循环也会执行其循环主体-在PSv3 +中,根本不执行循环主体。
也就是说,您的代码可以简化为这一命令:
$null