Если я запустил следующее
$3MonthsBack = Get-Date (Get-Date).AddMonths(-3) -f MM/dd/yyyy
New-MailboxExportRequest -mailbox kundesenter@company.no -IncludeFolders akriv -ContentFilter{Received -lt "$3MonthsBack"} -FilePath "\\sto-cm-01\Test\$BatchName.pst" -name "$BatchName" -ExcludeDumpster
Я получаю это:
The provided ContentFilter value is invalid. ContentFilter is invalid. The value "$3MonthsBack" could not be converted to type System.DateTime. --> The value "$3MonthsBack" could not be converted to type System.DateTime.
Когда я проверяю системные часы, они сформированы 29.06.2016, и если я запустил $ 3MonthsBack, они выдадут 29.03.2016 (Тот же формат?)
Как это исправить?
После помощи @sergei я теперь узнал, как это решить.
С New-Mailboxexportrequest вы должны обернуть текст и использовать "вместо {
Это означает Эта статья необходимо обновить, чтобы заменить его:
-ContentFilter {Received -lt '$Variable'}
Кому:
-ContentFilter "Received -lt '$Variable'"
Искал решение этой проблемы, меня это сводило с ума!
Я взял кусочки из упомянутой статьи, Эта статья с mysysadmintips.com и Эта статья от случайного коммунального обслуживания.
Я провел дальнейшее исследование New-PSSession и New-PSSessionOption. Наконец он заработал, используя PSSession и splatting.
Нет необходимости изменять региональные настройки на вашем сервере Exchange.
$SessionOption = New-PSSessionOption -Culture 'en-US'
$PSSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://<ExchangeServer>/PowerShell/" -SessionOption $SessionOption
$DateRangeStart = ([datetime]::Today).Addmonths(-3) # 3 months from today
$DateRangeEnd = [datetime]::Now # Now :)
$ExportParam = @{
Name = <RequestName>
Mailbox = <Mailbox>
ExcludeDumpster = $true
FilePath = <ExportPath>
ContentFilter = "((Received -le '"+$DateRangeEnd+"') -and (Received -ge '"+$DateRangeStart+"')) -or ((Sent -le '"+$DateRangeEnd +"') -and (Sent -ge '"+$DateRangeStart+"'))"
}
Invoke-Command -Session $PSSession -ScriptBlock {New-MailboxExportRequest @ExportParam}