Office365 PowerShell 与 DateTime 变量有关的问题

Office365 PowerShell 与 DateTime 变量有关的问题

我有以下非常简单的 PowerShell 代码片段,但它不起作用。

以下作品

Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -PageSize 5000 `
    -SenderAddress [email protected] `
    | 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 [email protected] `
    | where {$_.RecipientAddress -like "*example.com*"} `
    | Select-Object SenderAddress, RecipientAddress, Subject 

即使我用各种格式替换$dateStart$dateEnd,例如MM/dd/yyyy hh:mm:ss.

没有错误,只是没有返回结果,但是我使用了where我知道应该返回某些内容的模式。我还使用今天的日期(当未指定和时,这是默认日期-startdate)运行了上述示例(不起作用的示例-enddate),但同样不起作用。尽管这就是有效示例有效使用的。

所以我把范围缩小到日期,但我看不出问题所在。如果我输入错误的日期字符串,至少会出现错误,否则不会出现任何错误。有什么提示吗?

答案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 [email protected] `
    | where {$_.RecipientAddress -like "*example.com*"} `
    | Select-Object SenderAddress, RecipientAddress, Subject 

额外提示:

您还可以使用Get-Date来确定短日期格式定义在区域选项

Get-Date -Format d

它会给你正确的短日期形态您需要您的EndDateStartDate参数。

相关内容