获取计算表达式以在 Powershell Exchange 命令中正确显示
Getting Calculated Expression to Display Properly in Powershell Exchange Command
所以我有一个命令来查看我环境中的所有邮箱和 return 任何文件夹中最旧的项目,该文件夹不是该特定邮箱的 "Contacts" 文件夹。除了我在命令末尾输入的计算表达式外,整个事情似乎都有效:
@{Name="Address";Expression={Get-Mailbox | ForEach-Object {$_.PrimarySmtpAddress}
问题是这似乎 return 每个 line/object 的每个 Smtp 地址,而不是每个 line/object.
的一个 Smtp 地址
完整命令如下:
Get-Mailbox | ForEach-Object {Get-MailboxFolderStatistics -IncludeOldestandNewestItems -Identity $_.Alias | Where-Object {($_.OldestItemReceivedDate -ne $null) -and ($_.FolderPath -ne "/Contacts")} | Sort OldestItemReceivedDate | Select First 1 OldestItemReceivedDate, Identity, @{Name="Address";Expression={Get-Mailbox | ForEach-Object {$_.PrimarySmptAddress}}}}
理想情况下,这将 return 最旧项目的日期、找到它的文件夹和主要 SMTP 地址,但它似乎并不只提取相应的 SMTP 地址。看起来它在每次迭代中都拉出每个主 SMTP 地址。我确定这与我的命令有关,但我不知道在哪里。任何帮助将不胜感激。
计算表达式可以访问当前管道对象。但是,您在创建表达式时并未使用它。如您所见,您只是为每个用户调用 every 邮箱。使用带有 $_
的当前管道对象。 Get-Mailbox
足够聪明,可以通过 属性 名称匹配所需的值。
@{Name="Address";Expression={Get-Mailbox $_ | ForEach-Object {$_.PrimarySmtpAddress}}}}
但是您可以采用不同的方式来解决这个问题。您已经在管道开始时调用了所有邮箱。没有意义再次调用它。
Get-Mailbox | Select-Object Identity, @{Name="Address";Expression={$_.PrimarySmtpAddress}}, @{Name="OldestItemReceivedDate";Expression={
Get-MailboxFolderStatistics -IncludeOldestandNewestItems -Identity $_.Alias | Where-Object {
($_.OldestItemReceivedDate -ne $null) -and ($_.FolderPath -ne "/Contacts")} |
Sort-Object OldestItemReceivedDate |
Select-Object -ExpandProperty OldestItemReceivedDate -Last 1
}}
现在我们有 2 个计算属性,我们只需要为每个用户调用一次 Get-Mailbox
。你有一些我试图修复的拼写错误和逻辑错误。你会知道它是否做你想要的。
所以我有一个命令来查看我环境中的所有邮箱和 return 任何文件夹中最旧的项目,该文件夹不是该特定邮箱的 "Contacts" 文件夹。除了我在命令末尾输入的计算表达式外,整个事情似乎都有效:
@{Name="Address";Expression={Get-Mailbox | ForEach-Object {$_.PrimarySmtpAddress}
问题是这似乎 return 每个 line/object 的每个 Smtp 地址,而不是每个 line/object.
的一个 Smtp 地址完整命令如下:
Get-Mailbox | ForEach-Object {Get-MailboxFolderStatistics -IncludeOldestandNewestItems -Identity $_.Alias | Where-Object {($_.OldestItemReceivedDate -ne $null) -and ($_.FolderPath -ne "/Contacts")} | Sort OldestItemReceivedDate | Select First 1 OldestItemReceivedDate, Identity, @{Name="Address";Expression={Get-Mailbox | ForEach-Object {$_.PrimarySmptAddress}}}}
理想情况下,这将 return 最旧项目的日期、找到它的文件夹和主要 SMTP 地址,但它似乎并不只提取相应的 SMTP 地址。看起来它在每次迭代中都拉出每个主 SMTP 地址。我确定这与我的命令有关,但我不知道在哪里。任何帮助将不胜感激。
计算表达式可以访问当前管道对象。但是,您在创建表达式时并未使用它。如您所见,您只是为每个用户调用 every 邮箱。使用带有 $_
的当前管道对象。 Get-Mailbox
足够聪明,可以通过 属性 名称匹配所需的值。
@{Name="Address";Expression={Get-Mailbox $_ | ForEach-Object {$_.PrimarySmtpAddress}}}}
但是您可以采用不同的方式来解决这个问题。您已经在管道开始时调用了所有邮箱。没有意义再次调用它。
Get-Mailbox | Select-Object Identity, @{Name="Address";Expression={$_.PrimarySmtpAddress}}, @{Name="OldestItemReceivedDate";Expression={
Get-MailboxFolderStatistics -IncludeOldestandNewestItems -Identity $_.Alias | Where-Object {
($_.OldestItemReceivedDate -ne $null) -and ($_.FolderPath -ne "/Contacts")} |
Sort-Object OldestItemReceivedDate |
Select-Object -ExpandProperty OldestItemReceivedDate -Last 1
}}
现在我们有 2 个计算属性,我们只需要为每个用户调用一次 Get-Mailbox
。你有一些我试图修复的拼写错误和逻辑错误。你会知道它是否做你想要的。