我想要一个可以启动的脚本,它会给我所有以APS及其成员开头的组
我想得到一个HTML,它在标题中说:组和表中的用户
这是我目前得到的代码:
$properties = 'GivenName', 'Surname', 'UserPrincipalName'
Get-ADGroup -Filter {name -like "APS-*"} | ForEach {
$groupName = $_.Name
Get-ADGroupMember -Identity $_.SamAccountName |Get-ADUser -Property $properties |Select
@{N='GroupName';E={$groupName}},'GivenName', 'Surname', 'UserPrincipalName'}
但这给了我一个组、给定名称、Surename、用户主体的列表
我想得到:像这样组织
有办法得到这个吗?
为了实现所需的结果,请考虑以下几点
- 变量
$properties
包含公共值,不需要将其传递给`Get-ADUser即可获取其值 - 您需要为命令
Get-ADGroupMember
指定参数recursive
,以便获取子组中的所有子用户 - 如果需要以HTML格式输出结果,可以使用命令
ConvertTo-Html
我修改了你的代码以输出所需的格式,请检查
$groups = Get-ADGroup -Filter {name -like "APS-*"}
$list = foreach ($group in $groups) {
$groupName = $group.Name
Get-ADGroupMember -Identity $group.SamAccountName -Recursive | Get-ADUser | select @{N='GroupName';E={$groupName}},'GivenName', 'Surname', 'UserPrincipalName'
}
$out = $list | Group-Object GroupName
[string]$out_html = foreach ($item in $out){
$item.group | Select-Object 'GivenName', 'Surname', 'UserPrincipalName' | ConvertTo-Html -PreContent "<br>$($item.Name)<br><br>"
}
$out_html| Out-File .groups.html
如果需要从报表中排除特定用户,可以使用Where
子句筛选Get-ADGroupMember
的输出,如下所示
# i.e. to exclude specific samaccountnames
$execlusionList = @("SamAccountName1","SamAccountName2")
Get-ADGroupMember -Identity $group.SamAccountName -Recursive | where {$_.samaccountname -notin $execlusionList} | Get-ADUser | select @{N='GroupName';E={$groupName}},'GivenName', 'Surname', 'UserPrincipalName'