搜索邮箱Powershell脚本无法按预期运行

问题描述

如果我将直接Powershell与交换模块一起使用,则所有功能均按预期工作:

echo $mbxs | Search-MailBox -SearchQuery 'received:01/07/2020..01/08/2020 AND from:test@some.com' -DeleteContent -Force

但是如果我使用ps1脚本,则会出现KQL异常:

$date01=(get-date).AddDays(-14).ToString("dd\/MM\/yyyy")
$date02=(get-date).AddDays(-28).ToString("dd\/MM\/yyyy")
$mails = "test@some.com","test1@some.com"
$mbxs = import-csv C:\script\names.csv
foreach ($mail in $mails) 
{
    echo $mbxs | Search-MailBox -SearchQuery 'received:$date02..$date01 AND from:$mail' -DeleteContent -Force
    echo $mbxs | Search-MailBox -SearchQuery 'sent:$date02..$date01 AND to:$mail' -DeleteContent -Force
}
Remove-Variable mbxs,mails,date01,date02

The KQL parser threw an exception.

同一脚本可在2003服务器上的ps 1.0上运行,但不能在2012 R2上运行...我该怎么办?

解决方法

我看到几个问题:

  1. 您需要使用双引号来扩展字符串中的变量:
  2. 如果要从CSV导入,则必须引用该属性。
  3. 您不需要在管道中回显$ mbxs。您应该能够声明它。

它看起来应该像这样:

$date01=(get-date).AddDays(-14).ToString("dd\/MM\/yyyy")
$date02=(get-date).AddDays(-28).ToString("dd\/MM\/yyyy")
$mails = "test@some.com","test1@some.com"
$mbxs = import-csv C:\script\names.csv
foreach ($mail in $mails) 
{
    $mbxs | Search-Mailbox -SearchQuery "Received:$date02..$date01 AND From:$mail" -DeleteContent -Force
    $mbxs | Search-Mailbox -SearchQuery "Sent:$date02..$date01 AND To:$mail" -DeleteContent -Force
}
Remove-Variable mbxs,mails,date01,date02

但是,我也有点担心,因为如果要从CSV导入,则通常必须引用属性。如果您要发布CSV数据的代表性示例,我们可以对此进行更正。