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

如何在powershell中选择对象的多个子对象,powershell,select,Powershell,Select,目标是从包含子对象“users”和X个users的组列表中选择所有用户。稍后应将此用户列表作为批处理写入SQL Server。目标是拥有一个包含用户属性和groupname+id的表 为了加快选择和映射速度,我尝试使用powershell的select命令。但当组中有多个用户时,就会出现问题 $GroupUsers = @() foreach ($group in $groups) { $GroupUsers = New-Object -TypeName PSObject -Pr

目标是从包含子对象“users”和X个users的组列表中选择所有用户。稍后应将此用户列表作为批处理写入SQL Server。目标是拥有一个包含用户属性和groupname+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 用户ID:33 UserLoginName:WalterX.test.com 用户名:Walter X 用户电子邮件:x@mail.de 群组名称:群组1 GroupId:1 用户ID:{1,2,3,4…} UserLoginName:{User1.test.com、User2.test.com、User3.test.com…} UserTitle:{User1,User2,User3…} 用户电子邮件:{User1@mail.com,User2@mail.com...} 群组名称:群组2 GroupId:2 如您所见,第一个用户已正确导出。数组中的第二个条目在UserLoginName、Title和EMail属性中包含多个用户

  • 不要使用
    +=
    ,因为它会在每次添加时重建整个数组,因此无效
  • 使用
    [PSCustomObject]
  • 嵌套另一个foreach以迭代组的用户
  • $GroupUsers=foreach($groups中的组){
    foreach($group.Users中的用户){
    [PSCustomObject]@{
    UserLoginName=$User.LoginName
    UserTitle=$User.Title
    UserEmail=$User.Email
    GroupName=$group.Title
    }
    }
    }