powershell - 有没有办法从预定时间使用 Powershell 秒表作为计数器?
问题描述
我一直在寻找一种方法来使用 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
}
解决方案
这是完成工作的另一种方法。[咧嘴笑]它做了什么...
- 用于
[datetime]::Now
获取当前时间,
这明显比Get-Date
. - 将代码捆绑到具有标准名称格式的函数中
- 使用
foreach
而不是for
第一个比第二个更快,因为它执行一次测试,然后简单地迭代结果范围,而不是测试每次通过。 - 使用直接日期时间数学而不是较慢的
New-TimeSpan
.
从您的代码为您提供负时间间隔的当前时间中减去开始时间。我想你真的想要“多久了?” 而不是“开始日期过去多长时间?”。- 使用
Start-Sleep
cmdlet的全名
最好使用任何 cmdlet/函数/参数的全名,以便您拥有易于扫描的代码。
这是代码...
function Get-TimerSeconds
{
[CmdletBinding()]
Param (
[datetime]
$StartDate = [datetime]::Now,
[int]
$TotalSeconds = 10
)
begin {}
process
{
foreach ($Second in 1..$TotalSeconds)
{
([datetime]::Now - $StartDate).ToString()
Start-Sleep -Seconds 1
}
}
end {}
}
Get-TimerSeconds
用... 截断输出
00:00:00
00:00:01.0170000
...
00:00:08.1150000
00:00:09.1290000
Get-TimerInfo -StartDate '2019-11-01 21:31:41' -TotalSeconds 15
用... 截断输出
3.13:23:06.4170000
3.13:23:07.4320000
...
3.13:23:19.6000000
3.13:23:20.6150000
推荐阅读
- flutter - 颤振中“找不到 pubspec.yaml 文件”?
- php - 如何在 jqgrid 中复制/克隆一行?
- c# - 关于如何在 PoSh 类属性中使用通用列表的说明?
- android - Jetpack Compose 中是否有类似 ConstraintLayout 的“dimensionRatio”属性?
- python - 使用纬度/经度属性查找地址(Python & geopy)
- java - 如何使用 JOIN FETCH 执行 JPQL 以在一个查询中收集多个 JOIN
- .net - 使用 .Net 检索 Google 广告受众列表
- intellij-idea - Intellij idea 热键在运行任何弹出窗口中打开项目(执行上下文)
- python - 拆分两个元素的元组并添加到熊猫数据框
- angular - 如何使浏览器导航在 Angular SSR 应用程序中工作?