【问题标题】:Pulling Members out of an Arraylist Using Powershell使用 Powershell 从 Arraylist 中拉出成员
【发布时间】:2021-02-09 22:52:52
【问题描述】:

Powershell 新手,试图了解事物的工作原理/语法 - 在翻阅了 microsoft 文档和其他帖子后,我找不到直接的解决方案/正确的代码来获得我正在寻找的东西。

Get-Group | Select DisplayName, Members

这只是为我输出两列,所有组......以及每个组的所有成员。 (300 个邮箱——还有很多用户)

当导出为 CSV - 成员变成一个字符串,在空格之外没有任何拆分/分隔符。这会导致问题,因为我无法根据成员名称进行排序。

对于 members 列,powershell 本身的输出将如下所示:

{john doe, becky boo, bob smith...}
{ryan john, brianna nuggets, pizza pie...}

等...继续 300 个邮箱,当然导出时会显示完整的成员列表。

谁能告诉我我应该如何访问每个组的每个人的名字?例如...对于 group1 - 输出每个人的姓名。

输出:

John Doe
Becky Boo
Bob Smith

通常在其他语言中,它类似于members[0][0]会输出第一个 ArrayList、第一个元素...不知道它是如何在 powershell 中完成的,也找不到合适的文档。

要么是一个好的方向,要么是关于如何正确迭代对象列表或存储特定值的解释......所有信息都是有帮助的,因为我只是在寻找学习材料,因为我这样做是为了好玩反正。提前致谢!

编辑:

能够将所有组和成员输出到 excel - 允许我使用我选择的任何方法正确过滤它(属于 xxx 组的所有成员,或 xxx 成员所属的组。)

$results=@()
$groups = Get-group -resultsize unlimited | sort displayname
$groups | ForEach-Object {
    $group=$_
    $group.members | foreach-object {
        $member = $_
        $results += New-Object PSObject -property @{
            Member = $member
            GroupName = $group.DisplayName
            MailboxType = $group.RecipientTypeDetails
            GroupType = $group.GroupType
            ManagedBy = $group.ManagedBy
        }
    } 
}
$results | export-csv -path c:\All_Groups.csv

【问题讨论】:

    标签: arrays powershell for-loop arraylist


    【解决方案1】:

    将打印第一个组的组名,然后是其中的所有用户,如果您想要更多用户,请删除或更改 -first 1:

    Get-Group | Select -first 1 -properties DisplayName, Members | % {
        write-host $_.DisplayName -ForeGroundcolor Green
        $_.Members | % {write-host $_.DisplayName}
    }
    

    或者对于一些不同的语法:

    foreach ($group in Get-Group | Select -first 1 -properties DisplayName, Members) {
        write-host $group.displayname 
        foreach ($member in $group.members) {
            write-host $member.displayname -ForeGroundcolor Green
        }
    }
    

    如何访问属性:

    $groups = get-group
    $groups[0].DisplayName
    $groups[0].Members[0].DisplayName
    

    export-csv 仅适用于一维数组。如果您使用 2D 或更多数组,请使用 Export-Clixml / import-clixml

    您也可以像这样手动导出到 csv:

    "groupDisplayName,members" | out-file -path ./export.csv 
    foreach ($group in Get-Group) {
        $groupname_with_added_comma = $group.displayname + ","
        $all_members_seperated_with_dot_comma = ''
        foreach ($member in $group.members) {
            $all_members_seperated_with_dot_comma += $member.displayname + ";"
        }
        $line_to_appen_to_file = $groupname_with_added_comma + $all_members_seperated_with_dot_comma
        $line_to_appen_to_file | out-file -path ./export.csv -append
    }
    

    或以不同的方式:

    "groupDisplayName,members" | out-file -path ./export.csv 
    Get-Group | % {
        $groupname_with_added_comma = "$($_.displayname),"
        $all_members_seperated_with_dot_comma = ($_.members | select -expandproperty displayname) -join ";"
        $line_to_appen_to_file = $groupname_with_added_comma + $all_members_seperated_with_dot_comma
        $line_to_appen_to_file | out-file -path ./export.csv -append
    }
    

    【讨论】:

    • 非常棒的反馈.. 现在查看信息,我还设法获得了我正在寻找的确切输出,以便能够过滤属于这些组的所有组和成员。 - 请查看我添加的新代码,让我知道您可能会做出哪些最佳实践/更改。
    • 您的结果看起来非常好,我喜欢您创建自定义对象的方式。我对创作有一些个人偏好,我喜欢这样做。 [pscustomobject]@{someproperty='somevalue'} 而不是 New-Object PSObject -property @{someproperty='somevalue'} 但你的方式和我的方式一样好。
    • 我也喜欢使用%而不是foreach-object,但它的个人属性,%也很短,foreach-object对于不熟悉powershell的用户来说也更好阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多