11

この特定の例は、Get-UserおよびGet-Mailbox(Exchange 2010)です。Get-Userは必要な列のいくつかを返し、Get-Mailboxは他のいくつかの列を返します。2つの結果を両方の結果と一緒に1つのテーブルにまとめる方法を理解するのに苦労しています。

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

上記のようなコマンドの結果を取得して、以下のような結果に変換するにはどうすればよいですか?

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

FirstNameとLastNameはGet-Mailboxから返されません。逆に、AliasとCustomAttributesはGet-Userから返されません。すべてのユーザーがメールボックスを持っているわけではないため、列の一部がnullになる場合があります。しかし、私はこのような結合されたテーブルを返すための最良の方法を考え出すのに時間の悪魔を抱えています。

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

君たちありがとう。私は自分の問題を理解しようと多くの時間を費やしました、そしてあなたのコードは私がそれを正しくするのを助けました。デフォルトのアカウントがnoneに設定されているすべてのカレンダーを見つける必要がありました。以下は私が使用する必要があったものです。

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を取得するための1つのライナー:

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 に答える