问题描述
我的脚本从我的 txt 文件中列出的每个 DL 中提取成员,但有一些将安全组作为成员,我也想列出这些组中的成员。
set-adserversetting -viewentireforest $true
$groups = Get-Content -path 'C:\Users\test.txt'
$result =
foreach ($group in $groups) {
$members = Get-distributionGroupMember -$group -ResultSize Unlimited
foreach ($user in $members) {
[PSCustomObject]@{
GroupName = $group
samAccountName = $user.samAccountName
distinguishedname = $user.distinguishedname
name = $user.name
}
}
}
$result | export-csv 'C:\Users\testing.csv' -notypeinformation
解决方法
为此您需要一个递归函数。
试试:
function Get-NestedDistributionGroupMembers {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true,ValueFromPipeline = $true)]
[string]$Group
)
# Identity can be Name,Alias,DistinguishedName,CanonicalName,EmailAddress or GUID
Get-DistributionGroupMember -Identity $Group -ResultSize Unlimited | ForEach-Object {
if ($_.RecipientTypeDetails.Value -match "Group") {
Get-NestedDistributionGroupMembers $_.Name
}
else {
[PSCustomObject]@{
GroupName = $Group
SamAccountName = $user.samAccountName
DistinguishedName = $user.distinguishedName
Name = $user.name
}
}
}
}
$groups = Get-Content -Path 'C:\Users\test.txt'
$result = foreach ($group in $groups) {
Get-NestedDistributionGroupMembers $group
}
$result | Export-Csv -Path 'C:\Users\testing.csv' -NoTypeInformation