从管道中的前一个Cmdlet获取值

时间:2016-01-25 18:54:18

标签: powershell pipeline

我收到以下命令: Get-Mailbox | Get-MailboxPermission | Select-Object Identity,User,AccessRights | Format-Table -AutoSize。 我希望能够从前一个管道获取PrimarySMTPAddress值,我得到了Get-Mailbox的结果。 在我添加属性PrimarySMTPAddress时,我在列中没有收到任何内容。

最终结果应该是这样的:

Identity                       User     AccessRights     PrimarySMTPAddress
--------                       ------   ------------     ------------------
Domain.local/Users/Mailbox1    User1    {FullAccess}     Mailbox1@Domain.local
Domain.local/Users/Mailbox2    User2    {FullAccess}     Mailbox2@Domain.local
Domain.local/Users/Mailbox3    User3    {FullAccess}     Mailbox3@Domain.local

1 个答案:

答案 0 :(得分:3)

您可以使用ForEach-Object cmdlet,将值分配给变量,然后使用Write-Output将管道值发送到下一个cmdlet。使用Select-Object时,可以使用computed属性访问变量值。

Get-Mailbox | 
ForEach-Object { $primarySmtpAddress = $_.PrimarySMTPAddress; Write-Output $_; } |
Get-MailboxPermission | 
Select-Object Identity,User,AccessRights, @{n='PrimarySMTPAddress';e={$primarySmtpAddress}} | Format-Table -AutoSize