2016-04-29 50 views
1

因此,我有一个命令来查看我环境中的所有邮箱,并返回任何文件夹中不是该邮箱的“联系人”文件夹中最早的项目。整个事情似乎除了计算表达式,我在命令结束加送工作:获取计算的表达式在Powershell Exchange命令中正确显示

@{Name="Address";Expression={Get-Mailbox | ForEach-Object {$_.PrimarySmtpAddress} 

的问题是,这似乎回报每一位SMTP地址为每个行/对象,而不是每一个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}}}} 

理想的情况下,这将返回最早的项目,它被发现的文件夹,主SMTP地址的日期,但它似乎并不只拉对应的SMTP地址。它看起来像是每次迭代都拉动每个主SMTP地址。我确定这是与我的命令,但我不知道在哪里。任何帮助将非常感激。

回答

1

计算出的表达式可以访问当前的管道对象。但是,在创建表达式时不使用它。您只需拨打即可为每个用户输入每个邮箱,如您所见。使用当前管道对象$_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为每个用户。你有一些我试图修复的拼写错误和逻辑错误。你会知道它是否做到了你想要的。

+0

这正是我所需要的!我必须重新配置它才能显示文件夹路径,因为这显示来自Get-Mailbox的Identity属性,但这没什么大不了的。谢谢! – user3591385

+0

@ user3591385很高兴能帮到你。考虑将此答案标记为已接受,如果这对您有帮助。 – Matt