11

此特定示例是 Get-User 和 Get-Mailbox (Exchange 2010)。Get-User 返回一些我需要的列,并返回一些其他的 Get-Mailbox。我很难弄清楚如何将两者的结果与两者的结果结合到一个表中。

Get-User -Filter "..." | Get-Mailbox -Filter "..."

如何获取类似于上面的命令的结果并将其转换为类似于下面的结果?

FirstName  LastName  Alias   CustomAttribute1
---------  --------  ------  ----------------
Bob        Smith     bsmith  Example
Johnny     NoMail
Adam       Blye      ablye   Has a Mailbox

请注意,Get-Mailbox 不返回 FirstName 和 LastName,相反,Get-User 不返回 Alias 和 CustomAttributes。并非每个用户都有邮箱,因此有时部分列会为空。但是我正忙着找出返回这样一个组合表的最佳方法。

4

4 回答 4

18

获取用户,将每个用户保存在一个变量中,获取每个用户的邮箱,然后使用两个变量的属性创建一个新对象

Get-User -Filter ... | Foreach-Object{

    $user = $_
    $mbx = Get-Mailbox $user

    New-Object -TypeName PSObject -Property @{
        FirstName = $user.FirstName
        LastName = $user.LastName
        Alias = $mbx.Alias
        CustomAttribute1 = $mbx.CustomAttribute1
    }
}
于 2012-07-30T13:34:25.613 回答
6

我制作了一个自定义对象,这可能有点矫枉过正,但这是我找到的最简单的方法。

这是一些可以使用的示例代码。让我知道它是否会产生任何问题或其他问题:

$outputCollection = @()
$users = Get-User -Filter "..."
$mailboxes = Get-Mailbox -Filter "..."

$users | Foreach-Object {
    #Associate objects
    $userObject = $_
    $mailboxObject = $mailboxes | Where-Object {$_.Name -eq $userObject.Name}

    #Make a combined object
    $outputObject = "" | Select Name, UserAttribute, MailboxAttribute
    $outputObject.Name = $userObject.Name
    $outputObject.UserAttribute = $userObject.UserAttribute
    $outputObject.MailboxAttribute = $mailboxObject.MailboxAttribute

    #Add the object to the collection
    $outputCollection += $outputObject
}

$outputCollection

另一个应该起作用的选项称为计算属性:

Get-User -Filter "..." | Select Name, UserAttribute, @{Name="OtherAttribute"; Expression={(Get-Mailbox $_.Name).MailboxAttribute}}

...请注意,这将为每个条目运行一个新的 Get-Mailbox 命令,可能会增加执行时间

于 2012-07-30T12:51:22.330 回答
2

感谢你们。我花了很多时间试图找出我自己的问题,而您的代码帮助我解决了问题。我需要找到默认帐户设置为无的所有日历。以下是我需要使用的。

Get-Mailbox | ForEach-Object{
    $user = $_
    $calPerms = Get-MailboxFolderPermission $user":\calendar" -User Default | Where-Object {$_.AccessRights -eq "none"}

    New-Object -TypeName PSObject -Property @{
        Name = $user
        Permissions = $calPerms.AccessRights
        Users = $calPerms.user
        }
    }
于 2013-01-29T16:49:58.143 回答
1

一个获取 FirstName、LastName、Alias 和 CustomAttribute1 的衬垫:

Get-User | Select Firstname, Lastname, @{Name="Alias"; Expression={(Get-Mailbox $_.Name).Alias}}, @{Name="CustomAttribute1"; Expression={(Get-Mailbox $_.Name).CustomAttribute1}}
于 2017-10-13T00:41:56.867 回答