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

但是您也可以按照需要的任何方式对其进行格式化。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...