首页 > 解决方案 > New-TimeSpan:无法使用指定的命名参数解析参数集

问题描述

我是 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 char:13 + $days = New-TimeSpan -Start $inputdate -End $inputdate3 -Month 12 ... + ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.NewTimeSpanCommand

标签: powershell

解决方案


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

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

只有所有属于参数集之一的参数才能在给定的命令调用中一起使用。

在您的情况下,-Startand -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 个参数集:-Startand-End形式一个,and -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

推荐阅读