[英]Export user from multiple groups
早上好家伙,
我编写此脚本以在 CSV 文件中导出多个组中的多个用户。
除了不导出任何内容之外,我无法在 CSV 中插入一列,其中指定了用户的 appatenency 组。 只是名称为“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"
我看到发布的代码存在许多问题。 有些只是偏好,但有些看起来会影响结果。
- 初始Get-ADGroup
命令中不需要属性-Properties Name
。 默认情况下返回 Name 属性。
尊重@Theo 的评论: -ExpandProperty
但是,我不想不必要地使用它。 您甚至不需要第一个Select-Object
命令,只需引用该属性,它就会展开并返回一个字符串数组。 从 PowerShell 版本 3 开始支持属性展开。
-Filter
参数的参数应该是一个字符串。 我自己很难打破将这些查询包装在脚本块{...}
中的习惯,但是,AD cmdlet 有一些细节,使用字符串是最佳实践。 基本上,该参数采用字符串类型,如果您给它一个脚本块,它会将其转换为字符串,并且该过程可能并不总是按预期工作。
最好将您的 AD 属性存储在可以多次引用的数组中。 通常您只需要添加“描述”,但考虑到您也在稍后的Select-Object
命令中使用它,将所有所需的属性添加到数组中更有意义。
就个人而言,我不喜欢使用简化的语法。 我不知道社区对此有何看法,但我根据自己的喜好重写了。
你也失踪了|
' 在Where-Object
命令之前。
而且,是的,您必须在每次循环迭代时将循环内的Export-Csv
移动到 output 数据。 使用-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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.