Office365 PowerShell与DateTimevariables的问题

我有下面这个非常简单的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 

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

没有错误,只是没有结果返回,但是我使用的模式,我知道应该返回的东西。 我也使用今天的date(这是没有指定-startdate-enddate时的默认值)运行上述(不起作用的示例),并且也不起作用。 即使这是工作示例正在有效使用的。

所以我缩小到了date,但是我看不到问题。 如果我把一个datestring是错误的,至less给出错误,否则没有。 任何指针?

在你的脚本中,你正在使用

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

因为在这种情况下,值是string,所以Windows PowerShell将自动使用String数据types来存储该值,而Get-MessageTrace -StartDate-EndDate仅使用System.DateTimetypes的variables。

你可以像这样使用Get-Date来设置正确的typesvariables:

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

或者,您可以通过首先指定variables的types来创build新的System.DateTime对象,然后为其分配一个string值(如果它是可以转换为System.DateTime ):

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

不过,我更喜欢Get-Date因为它使你的脚本更具普遍性。 例如,您可以创build一个脚本,该脚本始终为您提供最近七天的信息:

 $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来计算区域选项中定义的短date格式

 Get-Date -Format d 

它会为您提供EndDateStartDate参数所需的正确的短date模式