【发布时间】:2019-11-05 12:43:07
【问题描述】:
我一直在寻找一种方法来使用 powershell 创建逐秒计时器/计数器,但使用从其开始的历史日期/时间。
我发现的所有示例都使用秒表(很棒),但这似乎不适用于“预加载”日期/时间。只有当前时间。
从几个地方提取想法后,我得到了一个工作脚本,但很想知道是否有更好的方法来做到这一点?
write-host "Started at $(get-date)"
for ($t=1; $t -le 300; $t++) {
$date = Get-Date
$datediff =(NEW-TIMESPAN -Start $StartDate -End $date).ToString()
$datediff | OUT-FILE "C:\Temp\ChronoDiff.txt"
sleep 1
}
【问题讨论】:
-
[1]
Get-Date相当慢,所以它会给你的循环增加明显的延迟。请改用[datetime]::Now。 [2] 你得到了 negative 次。 [grin] 你可能会颠倒你的日期时间数学。 [3] 不需要New-TimeSpan。只需直接将两个日期时间项目相减即可。这也将消除可检测到的延迟。 [4] 您每次都在覆盖您的输出文件。为什么?文件写入不仅会大大减慢速度,而且在事后写入该文件更有意义。 -
[5]
for循环比foreach循环慢。对于小计数它没有区别,但您可能想要使用更有效的循环。 [6] 不需要使用$Date或$DateDiff变量。只需像这样一步完成日期时间数学... >>>([datetime]::Now - $StartDate).ToString() -
感谢您的回复。回复:“你每次都在覆盖你的输出文件。为什么?”我目前正在使用一个名为 Snaz 的免费软件工具来进行计数以输出到文件(由另一个应用程序监控和显示),但是 Snaz 它有一个邪恶的时间漂移,这使得它在一段时间内不准确,超过几个小时。这个脚本是我试图制作一个尽可能准确的时间计数器,但我不介意每 30 秒左右跳过一秒以保持准确
-
感谢您对项目 [4] 的“为什么”以及为什么不准确是可以接受的。 [咧嘴]
标签: powershell timer count counter