如何将所有电子邮件分发中所有用户的Active Directory列表保存到.CSV?

凯德·威廉姆斯(Kade Williams)

我找到了这个示例,但不确定如何将输出正确保存到.csv。

Import-Module ActiveDirectory

$Groups = Get-ADGroup -Filter {GroupCategory -eq "Distribution"} -Properties Members

ForEach ($g in $Groups) {
    Write-Host $g.name
    Write-Host $g.members `n
}

我已经尝试过诸如:

Import-Module ActiveDirectory

$Groups = Get-ADGroup -Filter {GroupCategory -eq "Distribution"} -Properties Members

ForEach ($g in $Groups) {
    $g.name | Export-CSV C:\log.csv -notypeinformation -Append
    $g.members | Export-CSV C:\log.csv -notypeinformation -Append
}

它仅将1列保存到CSV中,称为长度。

这也使我在Write-Host $ g.members`n末尾删除了'n

有没有一种方法可以获取此数据并将其正确保存到.csv?

更新

在TheMadTechnician的帮助下和此链接https://blogs.technet.microsoft.com/heyscriptingguy/2013/07/22/export-user-names-and-proxy-addresses-to-csv-file/,我能够获得更接近我想要的

Import-Module ActiveDirectory

$Groups = Get-ADGroup -Filter {GroupCategory -eq "Distribution"} -Properties Members

ForEach ($g in $Groups) {
    $g.name | Export-CSV C:\log.csv -notypeinformation -Append
    $g.members | Export-CSV C:\log.csv -notypeinformation -Append
}
$Groups | Select Name,@{L='Members_1'; E={$_.members[0]}}, @{L='Members_2';E={$_.Members[1]}}, @{L='Members_3';E={$_.Members[2]}}, @{L='Members_4';E={$_.Members[3gq]}} | Export-Csv C:\log.csv -notype

这使我在CSV中输出以下内容:

Name        Members_1                                     Members_2             ETC...                                                         

NameOfGroup CN=Stormy Daniels,OU=IT,DC=DomainName,DC=com  CN=Joe Bob,OU=IT,DC=DomainName,DC=com

现在用户列表可能很大,所以我将不得不继续创建Member_3,Members_4等。

我不确定是否可以指定所有用户或循环

@{L='Members_1'; E={$_.members[0]}}

并增加数字,直到显示所有用户。

我也只需要带有名称的CN。我不需要Ou =或Dc =。

巨嘴鸟

事实证明,这比我预期的要难得多-由于成员计数(您必须进行与整数相当的计数)。我添加了一种可能性,可以限制结果大小,因为对于大型查询,活动目录会产生超时。

$limit_result_size = 10

$group_name = Get-ADGroup -Filter {GroupCategory -eq "Distribution"} -Properties Name, Members -ResultSetSize:$limit_result_size | Select-object name

ForEach ($name in $group_name.name) {
    If ((![String]::IsNullOrEmpty("$name")) -And ("$name" -notlike 'index')) {
        $count_members = Get-ADGroupMember -Identity "$name" | Measure-Object | Select-Object Count
        Write-Output "The AD group $name has $($count_members.Count) members.`n"
        For($counter = 0; $counter -lt $count_members.Count; $counter++) {
            $person = Get-ADGroup -Filter {Name -eq $name} -Properties Name, Members | Select-Object Name, @{N='Members';E={$_.Members[$counter]}}
            $person.Members = $person.Members | Select-String 'CN=[0-9a-zA-Z]+' -AllMatches | % { $_.Matches } | % { $_.Value }
            $person | export-csv -NoTypeInformation -Append -Path '<your_path>\log.csv'
        }
    }
}

简短的介绍:

(![String]::IsNullOrEmpty("$name")) -And ("$name" -notlike 'index')) 广告组应满足的条件。

Select-String 'CN=[0-9a-zA-Z]+' -AllMatches | % { $_.Matches } | % { $_.Value }仅选择CN=string_with_numbersCN=\w+如果愿意,可以将其替换为

该脚本在CVAD group和中生成一对CN=user_name如果还有其他不清楚的地方,请询问。

编辑

如果通用名称(CN)的名称中有空格,则必须将regexp调整为CN=[0-9a-zA-Z\s]+

编辑2添加用户的电子邮件地址。

由于您的问题已包含在电子邮件的标题请求中,因此我将在此处回答而不会出现新问题。请注意,此解决方案在regexp中使用了lookbehind来CN=从输出中排除,因此可以将其用作用户查询的源。它还使用PSCustomObject将所有信息收集在一起的。我重命名了一些变量,以便在用户详细信息的上下文中更好地理解。

$limit_result_size = 10

$group_name = Get-ADGroup -Filter {GroupCategory -eq "Distribution"} -Properties Name, Members -ResultSetSize:$limit_result_size | Select-object name

ForEach ($name in $group_name.name) {
    If ((![String]::IsNullOrEmpty("$name")) -And ("$name" -notlike 'index')) {
        $count_members = Get-ADGroupMember -Identity "$name" | Measure-Object | Select-Object Count
        Write-Output "The AD group $name has $($count_members.Count) members.`n"
        For($counter = 0; $counter -lt $count_members.Count; $counter++) {
            $person = Get-ADGroup -Filter {Name -eq $name} -Properties Name, Members | Select-Object Name, @{N='Members';E={$_.Members[$counter]}}
            $person.Members = $person.Members | Select-String '(?<=CN=)[0-9a-zA-Z\s]+' -AllMatches | % { $_.Matches } | % { $_.Value }
            $person_details = Get-AdUser -filter {name -eq $member} -Properties mail | Select-Object mail
            $person_additional_details = [PSCustomObject]@{ group_name = $group.Name
                                                            user_name  = $group.Members
                                                            email      = $person_details.mail
                                                      }
            If ([String]::IsNullOrEmpty($($person_additional_details.email))) {
                $person_additional_details.psobject.properties["email"].value = '<empty>'
            }

        # For user to see the written data
        Write-Output "AD Group: $($person_additional_details.group_name) `
AD User: $($person_additional_details.user_name) `
Users`'s email: $($person_additional_details.email)`n"

        # writing into the CSV file
        $person_additional_details | export-csv -NoTypeInformation -Append -Path '<your_path>\log.csv'
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建所有用户的电子邮件列表

将所有用户从Active Directory服务器导出到CSV

熊猫如何将数据框中的所有值保存到csv中?

Python将任意嵌套的列表保存到CSV

将列表框项目保存到 csv 文件中

如何在 Python 中将列表保存到 CSV

抓取后如何将列表中所有产品的所有产品信息导出到csv中?

如何使用Azure Active Directory图客户端在Azure B2C中查找具有相同用户名/电子邮件地址的所有用户?

如何将包含文件的列表保存到 R 中的 csv 中?

如何将邮件从Gmail保存到csv文件?

如何读取 CSV 电子邮件正文并将其保存到 CSV 文件中?

IMAP将所有电子邮件保存到“ / var / mail / user”

如何使用python将列表中包含字典的json保存到csv中

如何将 services.msc 上声明的所有服务和用户所有者的列表导出到 csv

如何保存Swiftmailer发送的所有电子邮件

如何将所有用户输入从for循环保存到文本文件中

将每个数据框从列表保存到单独的CSV文件

将data.table中的列表保存到csv并将其加载回(R)

将嵌套列表/数组保存到CSV以便日后轻松加载的最佳方法

使用np.savetxt将三个列表的集合保存到.csv时发生TypeError

在python中将zip列表保存到csv

如何使用python阅读特定的Outlook电子邮件并将其保存到excel / csv

验证 Firebase 中所有用户的电子邮件

如何将所有循环的结果保存在csv中

我如何将所有从 jpg 图像生成的哈希保存到 csv 文件中,而不仅仅是最后一个?

将列表保存到python中带有两位十进制数字的csv中?

美丽的汤-列表中所有项目的CSV结果

将数据从 GoogleChart 保存到 CSV

PHP将输出保存到csv文件