首页 > 解决方案 > Powershell - 拆分/组织属性的方法?

问题描述

我正在尝试了解我们的 Active Directory 用户以及他们所属的组。

来自 Java 背景,我想我可以使用嵌套的 for 循环为用户迭代一次,然后为组迭代一次,分别管道输出。在对其进行测试后,我意识到我遇到了一个问题,即由于 Select cmdlet 格式化值的方式,组无法正确显示。我在 Powershell 中引用了 Split 属性值,但我认为这不是我正在寻找的,因为我需要一种方法来识别用户组关系在下面的代码中,我有 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 "First Name Last Name" | 获取 ADPrincipalGroupMembership | 选择名称

这给了我这个输出:

显示名称

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

用户 1

<#缺少组#>


用户 2


用户 3

...

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

显示名称

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

用户 1

第 1 组

第 2 组

第 3 组

用户 2

第 1 组

第 2 组

第 3 组

用户 3

...

也许我一直在错误地处理这个问题,但是有没有办法解决这个问题?

标签: powershellazure-active-directoryazure-powershell

解决方案


使用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.


推荐阅读