当我尝试指定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
个对象的格式有什么问题?
答案 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中提供的值仅作为字符串文字应用,即它永远不会评估表达式或子表达式。