2015-03-31 2 views
1

Привет. Я получаю эту ошибку формата при попытке указать значение параметра DateTime. Вот мой сценарий который я бегу, нажав клавишу F5 в Powershell ISE:

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 

UPDATE: Оказывается, вам необходимо указать что-то вроде 3/31/2015. Почему это? Что не так с форматом для вышеуказанных DateTime объектов, которые я использовал?

+1

Вы пробовали что-то простое, как '3/31/2015' в качестве входного параметра? – TheMadTechnician

+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 

.\startTime.ps1 get-date BTW не работает, потому что значение параметра буквально строка get-date, которая не может быть принужден к объекту DateTime. То же относится к .\startTime.ps1 new-object DateTime(2015,03,31), поскольку начальное время получает буквенную строку 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 

КСТАТИ .\startTime.ps1 3/31/2015 работы, так как символьная строка 3/31/2015 может быть принужден к объект DateTime.

ОБНОВЛЕНИЕ: А, вы используете функцию обязательного указания параметров ISE. Раньше я сталкивался с этим вопросом. Значение, указанное здесь, IIRC только применяется как строковый литерал, то есть никогда не оценивает выражения или подвыражения.

+0

Вместо вызова сценария просто запустите скрипт в Powershell ISE и нажмите кнопку воспроизведения. –

+1

А, вы используете функцию принудительного ввода параметров ISE. Раньше я сталкивался с этим вопросом. Значение, указанное здесь, IIRC только применяется как строковый литерал, то есть никогда не оценивает выражения или подвыражения. –

+0

Я думаю, это ответ, но я не могу отметить его как ответ, потому что вы написали его как комментарий. –