我有以下非常简单的 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
它会给你正确的短日期形态您需要您的EndDate
和StartDate
参数。