Проблемы Office365 PowerShell с переменными DateTime

У меня есть следующий очень простой фрагмент кода 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 / дд / гггг чч: мм: сс.

Ошибок нет, просто нет результатов, однако я использовал , где шаблоны, которые, как я знаю, должны что-то возвращать. Я также выполнил приведенный выше (пример, который не работает), используя сегодняшнюю дату (которая является значением по умолчанию, когда -startdate и -enddate не указаны), и это тоже не » т работать. Хотя это то, что эффективно используется в рабочем примере.

Итак, я сузил круг до даты, но не вижу проблемы. Если я введу неправильную строку даты, которая, по крайней мере, выдает ошибку, иначе ничего. Есть указатели?

1
задан 5 April 2017 в 20:16
1 ответ

В вашем скрипте вы в настоящее время используете

$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 параметров.

2
ответ дан 3 December 2019 в 20:25

Теги

Похожие вопросы