从多个组导出用户
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
}
大家早上好,
我写这个脚本是为了在 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
}