我有以下代码,该代码假定从当前日期导出前 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'"
我希望这有助于更好地解释事情;如果这个解释不清楚,请告诉我,我会尝试适当地重新措辞。