在PowerShell中获得更好的计时器输出

时间:2013-07-23 13:42:01

标签: powershell-v2.0

我有一个脚本可以将一些文件复制到备份存储中。我添加了一个计时器,看看用它做多少时间。我用了

$script:start = Get-Date
$start = (Get-Date)
Copy-Item $var0, $var1, $var2 Folders -force -recurse -verbose -Exclude name
$endFulltime = (Get-Date)
"$(($endFulltime-$startFulltime).totalminutes)"

这个问题是输出。它给了我一些像0,34255234561245分钟的东西,或者如果我把它放在几秒钟内,它看起来一样,但数字不同。所以问题不在于它给我一个错误的输出;它看起来有点乱。

是否有可能获得5分43秒的输出?而不是这个很长的数字。

3 个答案:

答案 0 :(得分:3)

使用:

Measure-Command {copy-item $var0, $var1, $var2 Folders -force -recurse -verbose -Exclude name} | select @{n="time";e={$_.Minutes,"Minutes",$_.Seconds,"Seconds",$_.Milliseconds,"Milliseconds" -join " "}}

Measure-Command用于测量命令执行时间。使用带有“Select-Object”的哈希表来自定义输出。

输出在我的实验室中(我使用Get-Process cmdlet进行测试):

time
----
0 Minutes 0 Seconds 16 Milliseconds

也有“持续时间”属性。我将深入研究它是否可以简化事情。

答案 1 :(得分:2)

只需使用分钟秒> 属性,而不是 TotalMinutes TotalSeconds 总计 - 属性是双精度浮点数,为您提供给定时间单位的总时间跨度,而属性仅为单位名称(天,小时,分钟,秒... 。)将该单位的时间跨度组成一个整数。因此,要获得类似“ x 分钟和 y 秒”的输出,请执行以下操作:

$elapsedTime = $endFulltime - $start
"{0} minute(s) and {1} second(s)" -f $elapsedTime.Minutes, $elapsedTime.Seconds

或如果您愿意,请填写第二行:

"$($elapsedTime.Minutes) minute(s) and $($elapsedTime.Seconds) seconds"

答案 2 :(得分:1)

我一直在寻找与OP相同类型的输出。

要获得我想要的东西:

$script:start = get-date
$startFulltime = (Get-Date)
copy-item $var0, $var1, $var2 Folders -force -recurse -verbose -Exclude name
$endFulltime = (Get-Date)
(New-TimeSpan $startFulltime $endFulltime).ToString("hh'h:'mm'm:'ss's'")

结果将类似于:

02h:42m:12s