我有下面这个非常简单的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.DateTime
types的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
它会为您提供EndDate
和StartDate
参数所需的正确的短date模式 。