У меня есть следующий очень простой фрагмент PowerShell, который просто не работает.
Следующие работы
Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 `
-SenderAddress system@example.com `
| where {$_.RecipientAddress -like "*example.com*"} `
| Select-Object SenderAddress, RecipientAddress, Subject
Пока следующее не работает
$dateStart = "03/20/2017"
$dateEnd = "03/27/2017"
Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 `
-SenderAddress system@example.com `
| where {$_.RecipientAddress -like "*example.com*"} `
| Select-Object SenderAddress, RecipientAddress, Subject
Даже если я заменю $dateStart
и $dateEnd
с различными форматами, такими как MM/dd/yyyy hh:mm:ss.
Ошибок нет, просто результатов не было, но я использовал where
шаблоны, которые, как я знаю, должны что-то возвращать. Я также провел вышеупомянутый (пример, который не работает), используя сегодняшнюю дату (которая является значением по умолчанию, когда -startdate
и -enddate
не указаны), и это тоже не работает. Хотя это то, что эффективно использует рабочий пример.
Итак, я сузил круг до даты, но не вижу проблемы. Если я введу неправильную строку даты, которая, по крайней мере, выдает ошибку, иначе ничего. Есть указатели?
В вашем скрипте вы сейчас используете
$dateStart = "03/20/2017"
$dateEnd = "03/27/2017"
Поскольку в этом случае значения представляют собой строку символов, Windows PowerShell автоматически будет использовать String
тип данных для хранения значения, а Get-MessageTrace
-StartDate
и -EndDate
только взять System.DateTime
переменные типа.
Вы можете установить переменную правильного типа, используя Get-Date
как это:
$dateStart = Get-Date "03/20/2017"
$dateEnd = Get-Date "03/27/2017"
В качестве альтернативы вы можете создать новый System.DateTime
объект, указав сначала тип переменной, а затем присвоив ему строковое значение (если это значение, которое можно привести к System.DateTime
):
[System.Datetime]$dateStart = "03/20/2017"
[System.Datetime]$dateEnd = "03/27/2017"
Однако я бы предпочел Get-Date
поскольку это делает ваш сценарий более универсальным. Например, вы можете создать скрипт, который всегда дает вам информацию за последние семь дней:
$dateEnd = Get-Date
$dateStart = (($$dateEnd).AddDays(-7))
Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 `
-SenderAddress system@example.com `
| where {$_.RecipientAddress -like "*example.com*"} `
| Select-Object SenderAddress, RecipientAddress, Subject
Дополнительная подсказка:
Вы также можете использовать Get-Date
для выяснения краткий формат даты определено в Региональные параметры:
Get-Date -Format d
Это даст вам правильный шаблон короткой даты вам нужно для вашего EndDate
и StartDate
параметры.