Powershell-拆分/组织属性的方法?

时间:2019-05-15 15:38:21

标签: powershell azure-active-directory azure-powershell

我正在尝试概述我们的Active Directory用户及其所属的组。

从Java的背景出发,我想我可以只使用嵌套的for循环对用户进行一次遍历,对其他组进行遍历,分别对输出进行管道传输。经过测试,我意识到由于Select cmdlet如何格式化值而导致组无法正确显示的问题。我引用了Split property value in Powershell,但我认为它并不是我要找的东西,因为我需要一种方法来识别用户组关系。在下面的代码中,我有1个循环来测试值。

 $user = @(Get-ADUser -Filter * -Properties * | Select DisplayName)

     for ($i = 0; $i -le ($user.length - 1); $i += 1) {

      $group=@(Get-ADUser -Filter "Name -eq '$user[$i]'" | Get-ADPrincipalGroupMembership | Select name)

      echo $user[$i]
      echo $group[$i]
     }

我使用Identity参数与一个用户进行了测试:

  

$ group = Get-ADUser -Identity“名字姓氏” | Get-ADPrincipalGroupMembership |选择姓名

这给了我这个输出:

  

DisplayName

     

.....................

     

用户1   

     

<#个丢失的组#>

     


  用户2

     


  用户3

     

...

我注意到在用户之间的空格,该位置应该是该组的值。我进行了一些研究,并相信Select-object cmdlet是问题所在。我为用户使用Select DisplayName,为组使用Select name,但是PowerShell无法解析这两者,因为它们占用了同一列,因此我假设这是主要问题。我想要的应该看起来与此类似:

  

DisplayName

     

.....................

     

用户1

     

第1组

     

第2组

     

第3组

     

用户2

     

第1组

     

第2组

     

第3组

     

用户3

     

...

也许我一直在错误地解决这个问题,但是有没有一种方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

两次使用Get-ADUser会降低效率。另外,仅希望使用DisplayName时获取所有属性也会降低效率。尝试这样的事情:

$Users = Get-ADUser -Filter * -Properties DisplayName
foreach ($User in $Users) {
    $User.DisplayName
    $Groups = $User | Get-ADPrincipalGroupMembership
    $Groups.Name
}

我认为您遇到问题的部分原因是echo $group[$i]。如果用户甚至具有与$i的值一样多的组成员身份,则将输出单个组。