每月通过 PS 将邮箱导出到 PST

每月通过 PS 将邮箱导出到 PST

我有以下代码,该代码假定从当前日期导出前 30 天的邮箱。但它总是导出完整的邮箱,它会忽略内容过滤器。

$mailbox = "psingh"

$FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy")

$FromDate = "'$($FromDate)'"

New-MailboxExportRequest -ContentFilter {(Received -ge $FromDate) -or (Sent -ge $FromDate)} -Mailbox $mailbox -FilePath "\\FileServer\EmailBackups\ExportTest\MonthTest2\Singh, Paramjot.pst"

Write-Host "Done."

请帮我修正这个代码

答案1

您的代码看起来不错;但日期转换看起来很复杂,并且使用与服务器期望不同的日期格式存在风险。相反,请尝试按原样使用日期:

$mailbox = "psingh"
$FromDate = (Get-Date).AddDays(-30)
New-MailboxExportRequest `
    -ContentFilter {(Received -ge $FromDate) -or (Sent -ge $FromDate)} `
    -Mailbox $mailbox `
    -FilePath "\\FileServer\EmailBackups\ExportTest\MonthTest2\Singh, Paramjot.pst"
Write-Host "Done."

文档,这些字段是 DateTime;因此从 DateTime 转换为字符串只会增加风险而没有好处。

更多信息

我认为您的代码基于某人对日期进行硬编码的示例;例如(Received -ge '01/01/2015')。基于此,您尝试让$FromDate变量保存'01/01/2015'。但是,日期周围的引号是为了语法目的;即表示“其中包含的是一个值。当您有一个变量时,它已经知道它的内容/值;所以我们不需要将引号放入值本身。此外,硬编码版本使用字符串表示,因为它易于编写并自动转换为日期时间。该参数定义为接受 DateTime,并get-date返回 DateTime;因此您不需要任何转换逻辑。

即您的代码实际上是:-ContentFilter {(Received -ge "'01/01/2015'") -or (Sent -ge "'01/01/2015'")}

...相反于:-ContentFilter {(Received -ge '01/01/2015') -or (Sent -ge '01/01/2015')}

我有点惊讶您没有看到Cannot convert value "'MM/dd/yyyy'" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."错误;您是否抑制了错误?

要查看此错误,请运行以下命令[datetime]$dt = "'01/01/2015'"

我希望这有助于更好地解释事情;如果这个解释不清楚,请告诉我,我会尝试适当地重新措辞。

相关内容