从多个组导出用户

Export user from multiple groups

大家早上好,

我写这个脚本是为了在 CSV 文件中导出多个组中的多个用户。

除了不导出任何内容外,我无法在 CSV 中插入指定用户所属组的列。只是名称为“vpn-*”的那个,例如 vpn-users

Powershell 版本 4.0

$Data = $UserData = @()
$GroupName = Get-ADGroup -Filter {name -like "VPN-*"} -Properties Name | Select-Object Name
Foreach ($group in $GroupName)
{
$UserData = Get-ADGroupMember -Identity {$group}
Where objectClass -eq 'user' | 
Get-ADUser -Properties Name, UserPrincipalName, description, Enabled |
Select-Object Name, UserPrincipalName, description, Enabled 
}
$UserData  | export-csv "c:\members2.csv"

我发现发布的代码存在许多问题。有些只是偏好,但有些看起来会影响结果。

-Properties Name 在初始 Get-ADGroup 命令中不需要。名称 属性 默认为 return。

尊重@Theo 的评论回复:-ExpandProperty,但是,我不想在不必要的情况下使用它。您甚至不需要第一个 Select-Object 命令,只需引用 属性 它将展开并 return 一个字符串数组。 属性 从 PowerShell 版本 3 开始支持展开。

您对 -Filter 参数的参数应该是一个字符串。我自己很难打破将这些查询包装在脚本块 {...} 中的习惯,但是,AD cmdlet 有一些细节,最好使用字符串。基本上,参数采用字符串类型,如果您给它一个脚本块,它会将其转换为字符串,并且该过程可能并不总是按预期工作。

最好将您的 AD 属性存储在一个可以多次引用的数组中。通常你只需要添加 'Description' 但考虑到你也在后面的 Select-Object 命令中使用它,将所有需要的属性添加到数组中更有意义。

就个人而言,我不喜欢使用简化语法。我不知道社区对此有何看法,但我根据自己的喜好重写了。

您还缺少 |' 在 Where-Object 命令之前。

而且,是的,您必须在循环内移动 Export-Csv 以在每次循环迭代时输出数据。使用 -Append 参数避免在每次迭代时覆盖它。

未经测试的示例:

$ADProps = 'Name', 'UserPrincipalName', 'description', 'Enabled'

$GroupName = (Get-ADGroup -Filter "name -like 'VPN-*'" ).Name

Foreach ( $Group in $GroupName )
{
    $UserData = 
    Get-ADGroupMember -Identity $Group |
    Where-Object{ $_.objectclass -eq 'user' } | 
    Get-ADUser -Properties $ADProps |
    Select-Object ($ADProps += @{Name = 'Group'; Expression = { $Group }})

    $UserData | export-csv "c:\members2.csv" -NoTypeInformation -Append
}