New-TimeSpan: набор параметров не может быть разрешен с использованием указанных именованных параметров - PullRequest
1 голос
/ 11 апреля 2019

Я новичок в Powershell (вообще плохо знаком с кодированием).Я пытаюсь сделать следующее: пользователь должен иметь возможность ввести дату.Powershell должен отображать количество дней, оставшихся до 6 декабря следующего года.

Пример: ввод 20.01.2017, а вывод - количество дней, оставшихся до 06/12/2018.

Он работает совершенно нормально, когда я $days = New-TimeSpan -End (Get-Date -Year $inputdate3 -Month 12 -day 6), но я хочу заменить этот командлет моей строкой.

Мой код:

$inputdate = Read-Host "Please enter the current date [DD/MM/YYYY] :"
$inputdate = [DateTime]::Parse($inputdate)
$inputdate2 = $inputdate.AddYears(1)
$inputdate3 = $inputdate2.Year

$days = New-TimeSpan -Start $inputdate -End $inputdate3 -Month 12 -Day 6 | ForEach-Object {$_.days}

echo "$days"

Но я получаю эту ошибку:

New-TimeSpan: Набор параметров не может быть разрешен с использованием указанных именованных параметров.В C: \ Users \ Asli \ Desktop \ O2P2_Version1_2.ps1: 96 char: 13 + $ days = New-TimeSpan -Start $ inputdate -End $ inputdate3 -Month 12 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument: (:) [New-TimeSpan], ParameterBindingException + FullyQualifiedErrorId: AmbiguousParameterSet, Microsoft.PowerShell.Commands.NewTimeSpanCommand

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Как отмечает 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
0 голосов
/ 11 апреля 2019

Попробуйте это:

$startDate = Read-Host "Please enter the current date [DD/MM/YYYY] :"
$startDate = [DateTime]::Parse($startDate)

$endDate = Get-Date -Year ($startDate.Year + 1) -Month 12 -Day 6

$days = (New-TimeSpan –Start $startDate –End $endDate).Days
$days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...