在powershell对象内格式化数组

vawmfj5a  于 2023-01-30  发布在  Shell
关注(0)|答案(2)|浏览(131)

因此,我有一个脚本,用于获取每个用户以及该用户所属的所有组。当我导出到CSV时,它在一列中包含该用户,在下一列中包含该用户所属的所有组。是否可以使每个组都有自己的行,而不是在一个单元格中包含所有组?这是输出的外观
[用户][用户组a、用户组b等]
我想要
[用户][用户组a]
[][用户组b]
这是我的代码,如果有人想要它:

$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:\TEXTDUMP\usergroups.csv'
ruarlubt

ruarlubt1#

您只需要在组成员上执行一个额外的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:\TEXTDUMP\usergroups.csv'

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

ivqmmu1c

ivqmmu1c2#

我相信您希望扩展每组的数据,每组每行。如果是这样,您需要循环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:\TEXTDUMP\usergroups.csv'

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

-Filter "department eq 'Information Technology'"

应该工作并且是以下各项的良好替代品:

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

相关问题