Как отмечает AdminOfThings в комментарии, Ваша проблема заключается в использовании несовместимых параметров :
Параметры групп PowerShell, которые можно использоватьвместе с данной командой в так называемые наборы параметров .
Только параметры, все принадлежащие one наборов параметров, могут использоваться вместе при заданном вызовекоманда.
В вашем случае, например, -Start
и -Month
принадлежат различным наборам параметров, что вызвало ошибку, которую вы видели.
Простейший проверить наборы параметров команды - использовать Get-Command -Syntax
(вы также можете просто передать -?
, чтобы показать синтаксическую диаграмму, в контексте краткой справки командной строки,или Get-Help
, в контексте более подробной справки; в разделе интерактивной справки команды также показаны наборы параметров):
PS> Get-Command -Syntax New-TimeSpan
New-TimeSpan [[-Start] <datetime>] [[-End] <datetime>] [<CommonParameters>]
New-TimeSpan [-Days <int>] [-Hours <int>] [-Minutes <int>] [-Seconds <int>] [<CommonParameters>]
Как видите, существует 2 набора параметров: -Start
и -End
образуют единицу, а -Days
, -Hours
, -Minutes
и -Seconds
тон другой.
Обратите внимание, что вам вообще не нужно использовать New-TimeStamp
, потому что вычитание двух экземпляров [datetime]
неявно дает [timespan]
экземпляр , который представляетпромежуток времени (разница) между двумя датами.
Таким образом, вы можете упростить код следующим образом:
$inputDate = [datetime]::Parse((Read-Host "Please enter a start date [DD/MM/YYYY]"))
$refDate = Get-Date -Day 6 -Month 12 -Year ($inputDate.Year + 1)
$days = ($refDate - $inputDate).Days