在powershell对象中格式化数组



所以我有一个脚本来获取每个用户和用户所属的所有组。导出到CSV时,其中一列是用户,下一列是用户所在的所有组。是否有办法让每个组都有自己的行,而不是所有组都在一个单元格中?这是输出的样子

[user][usergroup a, usergroupb, etc]

[用户][usergroupa]

[] [usergroupb]

这是我的代码,如果有人想要它:

$users = get-azureaduser -Top 400 | Where-Object{$_.jobtitle -ne $null} |Where-Object{$_.department -eq "Information Technology"} | select userprincipalname
$groups = ForEach($user in $users){
$usergroups = get-azureadusermembership -ObjectId $user.UserPrincipalName | select displayname 
New-Object -TypeName PSObject -Property @{
User=$user.UserPrincipalName
Groups = [string]$usergroups.displayname
}
}
$groups | Export-Csv -Path 'C:TEXTDUMPusergroups.csv'

您只需要在组成员关系上添加一个额外的foreach循环:

$users = Get-AzureADuser -Top 400 | Where-Object { $_.jobtitle -ne $null } | Where-Object { $_.department -eq "Information Technology" } | Select-Object -ExpandProperty userprincipalname
$groupMemberships = ForEach ($user in $users) {
$userGroups = Get-AzureADUserMembership -ObjectId $user | Select-Object -ExpandProperty displayName
foreach($group in $userGroups){
New-Object -TypeName PSObject -Property @{
User   = $user
Group  = $group
}
}
}
$groupMemberships | Export-Csv -Path 'C:TEXTDUMPusergroups.csv'

这将为每个成员生成1个CSV行,而不是每个用户

我相信您希望扩展每组、每组每行的数据。如果是这样,您需要遍历Get-AzureADUserMembership的结果:

Get-AzureADUser -Filter "department eq 'Information Technology'" -Top 400 | ForEach-Object {
if($_.jobTitle) {
foreach($group in Get-AzureADUserMembership -ObjectId $_.UserPrincipalName) {
[pscustomobject]@{
User   = $_.UserPrincipalName
Groups = $group.DisplayName
}
}
}
} | Export-Csv -Path 'C:TEXTDUMPusergroups.csv'

有一段时间没有使用AzureAD模块,但我相信过滤器:

-Filter "department eq 'Information Technology'"

应该可以很好地替代:

Where-Object { $_.department -eq "Information Technology" }

相关内容

  • 没有找到相关文章

最新更新