New-TimeSpan:无法使用指定的命名参数来解析参数集

时间:2019-04-11 14:12:56

标签: powershell

我是Powershell的新手(一般是编码新手)。我想做的是:用户应该可以输入日期。 Powershell应该回响到明年12月6日为止的剩余天数。

示例:输入为20/01/2017,输出应为到2018年6月12日为止的剩余天数。

当我执行$days = New-TimeSpan -End (Get-Date -Year $inputdate3 -Month 12 -day 6)时,它完全可以正常工作,但是我想用我的字符串替换此cmdlet。

我的代码是:

$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   字符:13   + $ days = New-TimeSpan-开始$ inputdate-结束$ inputdate3-月12日...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [New-TimeSpan],ParameterBindingException       + FullyQualifiedErrorId:AmbiguousParameterSet,Microsoft.PowerShell.Commands.NewTimeSpanCommand

2 个答案:

答案 0 :(得分:1)

正如AdminOfThings在评论中指出的那样,您的问题是使用不兼容的参数 之一:

PowerShell将可以与给定命令一起使用的参数分组为所谓的参数集

在命令的给定调用中,只能一起使用属于参数集中的一个的参数。

在您的情况下,例如-Start-Month属于不同参数集,这提示您看到错误。

检查命令的参数集的最简单方法是使用 Get-Command -Syntax (您也可以仅传递-?来显示语法图,在简洁的命令行帮助中,或Get-Help,在更丰富的帮助中;命令的online help topic也显示参数集):

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和{{1 }}其他。


请注意,您根本不需要使用-Seconds,因为隐式减去两个New-TimeStamp实例会产生一个[datetime]实例,代表时间跨度(两个日期之间的差异)。

因此,您可以按以下方式简化代码:

[timespan]

答案 1 :(得分:0)

尝试一下:

$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