由于格式错误,无法将$ startTime识别为system.datetime

时间:2015-03-31 03:13:42

标签: datetime powershell

当我尝试指定DateTime参数的值时,我收到此格式错误。这是我的脚本,我通过在Powershell ISE中按F5来运行

param
(
    [Parameter(Mandatory=$true)]
    [datetime]$startTime 
)

write-output $startTime

当我运行它时,它会说Supply values for the following parameters:。我已尝试指定以下内容:

startTime: get-date
startTime: (get-date)
startTime: new-object DateTime(2015,03,31)
startTime: (new-object DateTime(2015,03,31))
startTime: $(get-date)
startTime: $((get-date))
startTime: $(new-object DateTime(2015,03,31))
startTime: $((new-object DateTime(2015,03,31)))

但是我一直收到这个错误:

Cannot recognise $startTime as a system.datetime due to a format error

更新 事实证明,您需要指定3/31/2015之类的内容。 为什么是这样?我使用的上述DateTime个对象的格式有什么问题?

1 个答案:

答案 0 :(得分:2)

我无法完全复制你所看到的内容。这是我的剧本:

7> Get-Content .\startTime.ps1
param
(
    [Parameter(Mandatory=$true)]
    [datetime]$startTime
)

write-output $startTime

这样调用起作用:

8> .\startTime.ps1 (Get-Date)

Monday, March 30, 2015 9:48:01 PM

BTW .\startTime.ps1 get-date不起作用,因为参数值实际上是字符串get-date,不能强制转换为DateTime对象。同上.\startTime.ps1 new-object DateTime(2015,03,31),因为startTime获取文字字符串new-object,但这确实有效:

10> .\startTime.ps1 (new-object DateTime 2015,03,31)

Tuesday, March 31, 2015 12:00:00 AM

子表达式版本应该也可以使用:

11> .\startTime.ps1 $(new-object DateTime 2015,03,31)

Tuesday, March 31, 2015 12:00:00 AM

BTW .\startTime.ps1 3/31/2015有效,因为文字字符串3/31/2015可以强制转换为DateTime对象。

更新:啊,您正在使用ISE的强制参数提示功能。我之前遇到过这个问题。 IIRC中提供的值仅作为字符串文字应用,即它永远不会评估表达式或子表达式。