arrays - 使用 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
解决方案
将打印第一个组的组名,然后是其中的所有用户,如果您想要更多用户,请删除或更改 -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
}
推荐阅读
- karate - 如何设置基本 API?我看到从第一个 API 的响应中添加了双引号
- mysql - 在两个表中搜索列:ERROR 1066 (42000): Not unique table/alias
- html - 如何获取图像中光标位置的坐标?
- c# - 在 C# 中克隆 ConcurrentDictionary 时是否应该使用锁定对象?
- swift - 无法将 T.Type 类型的值转换为 T
- c# - 即使我可以使用实例两次或更多次,我是否可以始终创建 IHttpClientFactory 的新实例?
- c# - 如何根据从查询中检索到的值创建“如果”?
- android - Flutter Android 在没有 onPress 的情况下以编程方式关闭/关闭 ProgressHUD 对话框
- c# - 返回 GeoCoordinate 的 JsonResult 的 MVC 错误
- python - 进行多步预测时,差异数据的哪个优化指标?