此特定示例是Get-User和Get-Mailbox(Exchange 2010).Get-User返回我需要的一些列,以及其他一些Get-Mailbox.我很难弄清楚如何将两者的结果合并到一张表中并得到两者的结果.
Get-User -Filter "..." | Get-Mailbox -Filter "..."
Run Code Online (Sandbox Code Playgroud)
如何获取与上述类似的命令的结果并将其转换为类似于下面的结果?
FirstName LastName Alias CustomAttribute1
--------- -------- ------ ----------------
Bob Smith bsmith Example
Johnny NoMail
Adam Blye ablye Has a Mailbox
Run Code Online (Sandbox Code Playgroud)
请注意,Get-Mailbox不返回FirstName和LastName,相反,Get-User不返回Alias和CustomAttributes.并非每个用户都有邮箱,因此有时列的一部分将为空.但我有一个时间的魔鬼找出返回这样的组合表的最佳方法.
Sha*_*evy 16
获取用户,将每个用户保存在变量中,获取每个用户的邮箱,然后使用两个变量的属性创建一个新对象
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
}
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个自定义对象,这可能有些过分,但这是我发现的最简单的方法.
这是一些可以使用的示例代码.如果它产生任何麻烦或其他问题,请告诉我:
$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
Run Code Online (Sandbox Code Playgroud)
另一个应该起作用的选项称为计算属性:
Get-User -Filter "..." | Select Name, UserAttribute, @{Name="OtherAttribute"; Expression={(Get-Mailbox $_.Name).MailboxAttribute}}
Run Code Online (Sandbox Code Playgroud)
...请注意,这将为每个条目运行新的Get-Mailbox命令,可能会增加执行时间
归档时间: |
|
查看次数: |
47249 次 |
最近记录: |