有没有一种方法可以在预定时间使用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
}
jerrytoto 回答:有没有一种方法可以在预定时间使用Powershell秒表作为计数器?

这是一个很好的解决方案。
并且,如果您正在寻找带有输入属性(您的特定开始日期/时间)的StopWatch函数之类的东西,请使用StopWatch名称将代码放入函数中。

    function StopWatch ([datetime]$StartDate) {
        do {
            write-host "$((New-TimeSpan $StartDate (get-date)).tostring())`r" -NoNewline
            sleep 1
        } while ($true)
    }

    C:\PS>StopWatch 1.1.2019
    C:\PS>StopWatch '1.1.2019 12:20'
,

这是完成任务的另一种方法。 [咧嘴]它的作用...

  • 使用[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
本文链接:https://www.f2er.com/3159590.html

大家都在问