如何解决PowerShell-多个Get-Date调用返回不同的时间格式/区域性
我目前正在研究Powershell脚本,在这里我需要测量脚本执行开始和结束之间的持续时间。经过一段时间的搜索,我决定使用这种方法:https://stackoverflow.com/a/61432373/11425760 我有一个Get-Date调用来获取脚本执行开始时的开始时间,而有另一个Get-Date调用恰好在脚本执行即将结束之前:
$startTime = Get-Date
# Script logic...
$EndTime = Get-Date
$Duration = New-TimeSpan -Start $startTime -End $EndTime
$Day = switch ($Duration.Days)
{
0 { $null; break }
1 { "{0} day," -f $Duration.Days; break }
Default {"{0} days," -f $Duration.Days}
}
$Hour = switch ($Duration.Hours)
{
#0 { $null; break }
1 { "{0} hour," -f $Duration.Hours; break }
Default { "{0} hours," -f $Duration.Hours }
}
$Minute = switch ($Duration.Minutes)
{
#0 { $null; break }
1 { "{0} minute," -f $Duration.Minutes; break }
Default { "{0} minutes," -f $Duration.Minutes }
}
$Second = switch ($Duration.Seconds)
{
#0 { $null; break }
1 { "{0} second" -f $Duration.Seconds; break }
Default { "{0} seconds" -f $Duration.Seconds }
}
Write-Host "The script execution took: $Day $Hour $Minute $Second"
Write-Host "Script execution ended"
虽然在实现该方法时似乎可以正常工作,但是我突然开始遇到一个问题,由于某种原因,我在调用New-TimeSpan时收到“ ParameterBindingException”,并告诉我“ End”参数的值(例如“ 08/19/2020 08:54:51”)无法转换为System.DateTime类型。当我查看提供的开始时间和结束时间时,尽管它们均来自Get-Date调用,但它们都以不同的格式打印。例如,end time
被打印为
"08/19/2020 08:54:51"
和start time
为
"Mittwoch,19. August 2020 08:54:08"
(德语格式)。这似乎仅在我第一次运行脚本时发生,因为一旦再次运行该脚本,该错误将不再发生。我不明白的是:在检查了开始时间和结束时间之后,开始时间是(按预期)DateTime对象,但是结束时间只是一个字符串,尽管这两个值都来自Get-Date调用。为什么甚至会一开始就出现这种情况?如何避免遇到此问题(或类似问题)?
解决方法
我建议放弃该方法,而改用StopWatch。
只需在执行开始时创建并启动一个秒表,最后将其停止即可,您就有时间查看对象了。
$stopwatch = [system.diagnostics.stopwatch]::StartNew()
$stopwatch.Stop()
$stopwatch
这将输出:
IsRunning经过的经过的毫秒数的经过的提示
False 00:00:00.0009000 0 9000
或者您可以得到这个:
$stopwatch.Elapsed
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 1
Ticks : 16324
TotalDays : 1,88935185185185E-08
TotalHours : 4,53444444444444E-07
TotalMinutes : 2,72066666666667E-05
TotalSeconds : 0,0016324
TotalMilliseconds : 1,6324
但是您也可以按照需要的任何方式对其进行格式化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。