如何循环特定秒数
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)
# ...
【讨论】:
以上是关于如何循环特定秒数的主要内容,如果未能解决你的问题,请参考以下文章