Powershell - 在表达内部调用属性

时间:2013-06-01 15:15:24

标签: powershell expression

请你告诉我,为什么这样做:

Get-DistributionGroup -Filter {DisplayName -like "*Name*"} |
  fl Displayname, PrimarySMTPAddress, @{Label = "Members"; expression = {
    Get-DistributionGroupMember $_.Identity |
      select -ExpandProperty PrimarySmtpAddress
  }}

那不是:

Get-DistributionGroup -Filter {DisplayName -like "*Name*"} |
  fl Displayname, PrimarySMTPAddress, @{Label = "Members"; expression = {
    (Get-DistributionGroupMember $_.Identity).PrimarySmtpAddress
  }} 

2 个答案:

答案 0 :(得分:0)

最好是更详细地描述问题而不是“不工作” - 如果有错误信息,请给出。如果你得到意想不到的结果,请描述你的期望和你得到的结果。

Get-DistributionGroupMember $_.Identity | select -ExpandProperty PrimarySmtpAddress返回一个字符串。

(Get-DistributionGroupMember $_.Identity).PrimarySmtpAddress返回一个对象。

答案 1 :(得分:0)

这取决于你获得多少成员(如果结果是一个对象长,则第二个命令将起作用)。

第一个命令将结果传递给select-object,后者扩展所有组成员(成员集合展开,每个成员通过管道传递给select-object,一次一个)。

第二个命令获取成员集合,并被要求显示集合本身的主要地址,而不是每个成员的地址,这导致集合没有PrimarySmtpAddress属性

要使第二个命令工作,您需要先管道到Foreach-Object:

... @{Label = "Members"; expression = {(Get-DistributionGroupMember $_.Identity | Foreach-Object {$_.PrimarySmtpAddress}}