首页 > 解决方案 > PowerShell 管道 ExpandProperty 到另一个 Select-Object

问题描述

我想获取 O365 租户中所有电子邮件收件人的别名。如果我正在执行这一传统 Exchange,最简单的方法是Get-Recipient使用 Exchange 管理控制台提取 SMTPAddress 属性。(请注意,选择通过管道连接到另一个选择;就像冠军一样工作。)

Get-Recipient | Select Name,SamAccountName -ExpandProperty EmailAddresses | Select Name,SamAccountName,SmtpAddress

问题是当我尝试在 EXO 中做同样的事情时,“EmailAddresses”属性被输出为一个扁平字符串,所以当我尝试将它传送到第二个选择时,唯一的属性是长度,而不是实际值字符串。

以下类型的作品,但我觉得必须有更好的方法?

Get-EXORecipient | Select Name -ExpandProperty EmailAddresses | % {Write-Output "$($_.Name),$($_)"}

标签: powershell

解决方案


正如您所说,-ExpandProperty EmailAddresses扩展为strings

-Property如果您还传递(位置隐含的)参数,例如Name在您的示例中,这些字符串装饰的附加属性存在,但通常不会出现,除非您在现在装饰的输出字符串上显式访问它们。

如果您想要包含每个电子邮件地址作为属性的输出对象,则需要做更多的工作。

Get-EXORecipient | ForEach-Object {
  foreach ($emailAddress in $_.EmailAddresses) {
    [pscustomobject] @{
      EmailAddress = $emailAddress
      Name = $_.Name 
      # ... add further properties of interest here
    }
  }
}

推荐阅读