如何循环特定秒数

Posted

技术标签:

【中文标题】如何循环特定秒数【英文标题】:How to loop for a specific number of seconds 【发布时间】:2020-05-17 16:02:10 【问题描述】:

我想在我的 Powershell 脚本中创建一个将运行特定秒数的循环,这可能吗?

这是我目前所拥有的,不确定是否正确。我希望有一种更直接的方法来做到这一点。有可能吗?

function collectProcess 
    param (
        #processnamn
        $process,
        #limit for the WS
        $limit,
        #Amount of seconds the loop will run
        $length
    )
    #Creating a new time span with the amount of seconds given
    $timeout = new-timespan -Seconds $length
    #starting a timer to compare later with the timeout
    $timer = [diagnostics.stopwatch]::StartNew()
    while ($timer.elapsed -lt $timeout) 
        $tempProcess= Get-Process -Name $process
        if ($tempProcess.WS -gt $limit) 
            Stop-Process -Name $process -Force
            Write-Host ("Process has stopped now"+ " The WS is: "+ $tempProcess.WS + " and our limit is: "+$limit )
            break;
        

    


Powershell 版本:5.1

【问题讨论】:

这能回答你的问题吗? Powershell/PowerCLI Loop, timeouts and exits 这还不错。我会在循环中放一个sleep 1 以减少一些cpu。 【参考方案1】:

您需要创建一个 DateTime 对象,而不是 TimeSpan(表示 duration 时间的长度),该对象描述距现在正好 X 秒的时间点:

$XSecondsFromNow = (Get-Date).AddSeconds($length)

while((Get-Date) -lt $XSecondsFromNow)
  # ...


您可能希望确保用户不提供负(或大得离谱)值,为此我建议应用 ValidateRange 参数属性:

param(
  [string]$ProcessName,

  [long]$Limit,

  [ValidateRange(0.5, 3600.0)]
  [double]$TimeOut
)

$XSecondsFromNow = (Get-Date).AddSeconds($TimeOut)

while((Get-Date) -lt $XSecondsFromNow)
  # ...

【讨论】:

以上是关于如何循环特定秒数的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中获取自特定时间以来的秒数

Delphi:如何创建具有特定秒数的静音 MP3 文件?

java:在特定秒数后运行函数

获取 C 中特定日期的纪元秒数

如何在 C++ 中计算下周六之前的秒数?

C:如何在特定时区(按偏移量)打印特定的“时间”值?