从管道中的先前 Cmdlet 获取值

Get value from previous Cmdlet in the pipeline

我得到以下命令: Get-Mailbox | Get-MailboxPermission | Select-Object Identity,User,AccessRights | Format-Table -AutoSize。 我希望能够从我获得 Get-Mailbox 结果的前一个管道中获取 PrimarySMTPAddress 值。 在我添加 属性 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

您可以使用 ForEach-Object cmdlet,将值分配给变量,然后使用 Write-Output 将管道值发送到下一个 cmdlet。当你使用 Select-Object 时,你可以通过计算 属性.

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

为此目的有一个通用参数“pipelinevariable”。

Get-Mailbox -pipelinevariable mail | Get-MailboxPermission | 
  Select-Object Identity,User,AccessRights,
  @{n='PrimarySMTPAddress';e={$mail.PrimarySMTPAddress}} | 
  Format-Table -AutoSize