Arrays 使用Powershell从Arraylist中拉出成员

Arrays 使用Powershell从Arraylist中拉出成员,arrays,powershell,for-loop,arraylist,Arrays,Powershell,For Loop,Arraylist,powershell新手,试图了解事物的工作原理/语法-在浏览microsoft文档和其他帖子之后,我找不到直接的解决方案/正确的代码来获得我想要的东西 Get-Group | Select DisplayName, Members 这只是为我输出了两列,所有的组。。。以及每个小组的所有成员。(300个邮箱-以及大量用户) 当导出为CSV时,成员将成为一个字符串,除空格外没有任何拆分符/分隔符。这会导致一个问题,因为我无法根据成员名称进行排序 对于members列,powershell本身的输

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

Get-Group | Select DisplayName, Members
这只是为我输出了两列,所有的组。。。以及每个小组的所有成员。(300个邮箱-以及大量用户)

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

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

{john doe, becky boo, bob smith...}
{ryan john, brianna nuggets, pizza pie...}
等等。。。对于300个邮箱继续,当然,当导出时,itll将显示完整的成员列表

有人能告诉我如何准确地访问每个组的每个名称吗?例如对于group1-输出每个单独的名称

输出:

John Doe
Becky Boo
Bob Smith
通常在其他语言中,它类似于
成员[0][0]
将输出第一个ArrayList、第一个元素。。。不知道它是如何在powershell中完成的,也找不到合适的文档

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

编辑:

能够将所有组和成员输出到excel-允许我使用我选择的任何方法(属于xxx组的所有成员,或xxx成员所属的组)对其进行正确筛选


将打印第一个组的组名,后跟其中的所有用户,如果您想要更多用户,请删除或更改-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
导出csv
仅适用于一维数组。如果您使用2D或更多数组,则使用类似于导出Clixml/
导入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'}
而不是off
新对象PSObject-property@{someproperty='somevalue'}
但是你的方法和我的一样好。我也喜欢用
%
而不是
处理每个对象
,但是它的个人属性,
%
很短,
foreach对象
对于不熟悉powershell的用户来说可读性更好。
"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
}