我是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
答案 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