首页 > 解决方案 > 使用 Powershell 从 Arraylist 中拉出成员

问题描述

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

标签: arrayspowershellfor-looparraylist

解决方案


将打印第一个组的组名,然后是其中的所有用户,如果您想要更多用户,请删除或更改 -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
}

推荐阅读