Problemas do Office365 PowerShell com variáveis DateTime

1

Eu tenho o seguinte snippet muito simples do PowerShell que simplesmente não funciona.

Os seguintes trabalhos

Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 '
    -SenderAddress [email protected] '
    | where {$_.RecipientAddress -like "*example.com*"} '
    | Select-Object SenderAddress, RecipientAddress, Subject 

Enquanto o seguinte não funciona

$dateStart = "03/20/2017"
$dateEnd = "03/27/2017"

Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 '
    -SenderAddress [email protected] '
    | where {$_.RecipientAddress -like "*example.com*"} '
    | Select-Object SenderAddress, RecipientAddress, Subject 

Mesmo se eu substituir os $dateStart e $dateEnd por vários formatos, como MM/dd/yyyy hh:mm:ss.

Não há erro, apenas nenhum resultado foi retornado. No entanto, usei where padrões que sei que devem retornar alguma coisa. Eu também corri o acima (exemplo que não funciona) usando a data de hoje (que é o padrão quando -startdate e -enddate não são especificados) e que também não funciona. Mesmo que seja isso que o exemplo de trabalho está usando efetivamente.

Então reduzi a data, mas não vejo o problema. Se eu colocar em uma seqüência de data que está errado, pelo menos, dá e erro, caso contrário, nada. Quaisquer ponteiros?

    
por Drifter104 05.04.2017 / 17:52

1 resposta

2

No seu script, você está usando atualmente

$dateStart = "03/20/2017"
$dateEnd = "03/27/2017"

Como neste caso os valores são uma cadeia de caracteres, o Windows PowerShell usará automaticamente o tipo de dados String para armazenar o valor, enquanto Get-MessageTrace -StartDate e -EndDate só obtém variáveis System.DateTime type.

Você pode definir a variável de tipo correta usando Get-Date assim:

$dateStart = Get-Date "03/20/2017"
$dateEnd = Get-Date "03/27/2017"

Como alternativa, você pode criar o novo objeto System.DateTime especificando primeiro o tipo da variável e, em seguida, atribuir um valor a ela (se for um valor que pode ser convertido em System.DateTime ):

[System.Datetime]$dateStart = "03/20/2017"
[System.Datetime]$dateEnd = "03/27/2017"

No entanto, prefiro Get-Date , pois isso torna seu script mais generalizável. Por exemplo, você pode criar um script que sempre lhe forneça informações nos últimos sete dias:

$dateEnd = Get-Date
$dateStart = (($$dateEnd).AddDays(-7))

Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 '
    -SenderAddress [email protected] '
    | where {$_.RecipientAddress -like "*example.com*"} '
    | Select-Object SenderAddress, RecipientAddress, Subject 

Sugestão adicional:

Você também pode usar Get-Date para descobrir o formato de data abreviada definido nas Opções regionais :

Get-Date -Format d

Ele fornecerá o padrão de data abreviada > necessário para os parâmetros EndDate e StartDate .

    
por 05.04.2017 / 18:25