【问题标题】:Returning Multiple Results of the same Variable on One Line在一行上返回同一变量的多个结果
【发布时间】:2016-06-07 23:46:46
【问题描述】:

我正在尝试使用 PowerShell 来遍历共享邮箱并获取具有特定访问权限的用户。我可以这样做,但问题是邮箱有多个具有访问权限的用户。

我将只使用一个邮箱的代码,而不是每个邮箱。我使用的代码如下:

Get-MailboxPermission -Identity example@domain.com | select Identity, User |
    where user -like '*@*'

我得到了这个结果:

但我想得到这样的东西:

有没有办法让具有相同身份的用户在同一行?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用Group-Object按邮箱对用户进行分组,然后使用calculated properties展开组:

    ... | Group-Object Identity |
        Select-Object @{n='Identity';e={$_.Name}},
                      @{n='User';e={$_.Group.User -join ', '}}
    

    Group-Object 通过Identity 属性对结果对象进行分组,即所有具有相同标识值的对象都收集在一个GroupInfo 对象中(准确地说是在其Group 属性中)。然后,带有计算属性的Select-Object 语句为每个组创建一个新的自定义对象。 User 计算属性扩展了分组对象的 User 属性,并将名称连接到一个逗号分隔的列表中。

    请注意,您需要 PowerShell v3 或更新版本才能使 $_.Group.User -join ', ' 工作。在早期版本中,您需要将其替换为类似

    ($_.Group | Select-Object -Expand User) -join ', '
    

    【讨论】:

    • 谢谢!我不是很明白,但它确实有效!
    • @LukeK 添加了一些解释(请同时查看我引用的文档)。另外,如果您发现它解决了您的问题,请考虑accepting the answer
    • 会的。另外,另一个问题。如果邮箱没有任何完全访问用户,我希望它返回空白。它目前不打印任何内容,只是跳过该邮箱。有没有办法让身份仍然显示在用户列中?
    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2019-01-08
    相关资源
    最近更新 更多