【问题标题】:New-TimeSpan: Parameter set cannot be resolved using the specified named parametersNew-TimeSpan:无法使用指定的命名参数解析参数集
【发布时间】:2019-09-02 05:08:59
【问题描述】:

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

【问题讨论】:

  • 这是一个参数集问题。如果使用-Start-End,则不能在同一命令中使用-Month-Day

标签: powershell


【解决方案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-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

【讨论】:

  • 很高兴听到它有帮助,@Peony;我的荣幸。
【解决方案2】:

试试这个:

$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

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2019-04-05
    • 2014-09-05
    • 2020-07-23
    • 2018-05-13
    • 2015-10-12
    相关资源
    最近更新 更多