我对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"
但我知道这个错误:
named :不能使用指定的命名参数解析参数集。At 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,InvalidArgument
发布于 2019-04-11 06:38:24
正如AdminOfThings在注释中所指出的,您的问题是使用不兼容的参数
PowerShell将可与给定命令一起使用的参数分组为所谓的参数集。
只有属于其中一个参数集的所有参数都可以在给定的命令调用中一起使用。
例如,在您的示例中,-Start
和-Month
属于不同的参数集,这会导致您看到的错误。
检查命令参数集( Get-Command -Syntax
)的最简单方法是使用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>]
如您所见,有两个参数集:一个是-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
发布于 2019-04-11 06:35:31
试试这个:
$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
https://stackoverflow.com/questions/55634614
复制相似问题