计算Powershell中处理函数的时间

时间:2015-06-05 08:58:03

标签: powershell

我有一个Powershell文件,可以根据CSV文件中的输入参数列表发送电子邮件。

我根据需要运行的总时间计算了每封电子邮件之间的延迟,除以文件中的行数。不幸的是,这并没有考虑发送每封电子邮件所需的时间长度,可能会在1秒到60秒之间变化,因此无法估算。

目的是计算发送电子邮件所花费的时间长度并从预期的延迟中减去该值,在发送下一封电子邮件之前给出暂停值(这会产生负值,下一封电子邮件将是立即发送。)

我无法让时间计算正常工作......当前的循环代码如下:

$StartTime = [datetime](get-date).ToShortTimeString()
Start-Countdown -Seconds $iDelay -Message ("Waiting to send email "+$i+" of "+$LinesinFile)
sendMail
$iTimeToRun = NEW-TIMESPAN –Start $StartTime -End [datetime(get-date).ToShortTimeString()
$iDelay = $Delay - $iTimeToRun

延迟是所需的延迟时间,因此减去发送上一封电子邮件的时间应该会给我下一次所需的延迟。 Start-Countdown和sendMail是脚本中定义的函数... sendMail函数是需要专门计算的函数,因为它对运行时间的影响最大。

2 个答案:

答案 0 :(得分:3)

Measure-Command将执行PowerShell执行。

答案 1 :(得分:2)

如果您不想使用Measure-Command,可以使用a StopWatch

$Delay = New-TimeSpan -Seconds 120
Write-Verbose "sending mail"
$Watch = [System.Diagnostics.Stopwatch]::StartNew()
sendMail
$Watch.Stop()
Write-Verbose "Sending mail took $($Watch.Elapsed.TotalSeconds) seconds"
if(($Delay = $Delay - $Watch.Elapsed) -gt 0){
    Write-Verbose "Waiting another $($Delay.TotalSeconds) seconds before sending the next"
    Start-Sleep -Milliseconds $a.TotalMilliseconds
} else {
    Write-Verbose "Sending mail exceeded delay, right on to the next one!"
}