如何在Powershell中选择一个对象的多个子对象

时间:2019-07-19 17:01:56

标签: powershell select

目标是从包含具有X个用户的子对象“用户”的组列表中选择所有用户。此用户列表应稍后批量写入SQL Server。目标是拥有一个包含用户属性和组名+ ID的表。

为了使选择和映射更快,我尝试使用powershell的select命令。但是当组中有多个用户时会出现问题

$GroupUsers = @()
foreach ($group in $groups) {
        $GroupUsers = New-Object -TypeName PSObject -Property @{
            UserLoginName = $group.Users.LoginName
            UserTitle     = $group.Users.Title
            UserEmail     = $group.Users.Email
            GroupName     = $group.Title
        } | Select UserLoginName, UserTitle, UserEmail, GroupName

         $GroupUsers+= $GroupUsers

    } 

生成的输出如下所示:

UserId        : 33
UserLoginName : WalterX.test.com
UserTitle     : Walter X
UserEmail     : x@mail.de
GroupName     : Group1
GroupId       : 1

UserId        : {1, 2, 3, 4...}
UserLoginName : {User1.test.com, User2.test.com,User3.test.com ...}
UserTitle     : {User1,User2,User3...}
UserEmail     : {User1@mail.com,User2@mail.com...}
GroupName     : Group2
GroupId       : 2

如您所见,第一个用户已正确导出。数组的第二个条目在UserLoginName,Title和EMail属性上具有多个用户...

1 个答案:

答案 0 :(得分:0)

  1. 请勿使用+=,因为它会在每次添加时重建完整的数组,因此效果不佳
  2. 使用[PSCustomObject]
  3. 将foreach的输出分配给变量。
  4. 嵌套另一个foreach以迭代该组的用户。
$GroupUsers = foreach($group in $groups) {
    foreach($user in $group.Users){
        [PSCustomObject]@{
            UserLoginName = $User.LoginName
            UserTitle     = $User.Title
            UserEmail     = $User.Email
            GroupName     = $group.Title
        }
    }
}