【问题标题】:Calculate time to process function in Powershell [duplicate]在Powershell中计算处理函数的时间[重复]
【发布时间】:2015-08-20 03:48:51
【问题描述】:

我有一个 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 函数是需要专门计算的函数,因为它对运行时间的影响最大。

【问题讨论】:

  • 不清楚您要做什么。延迟应该是动态的吗?为什么你不能修复它?为什么需要它?显示sendMail 函数可能有助于更清楚地说明问题所在。查看使用Measure-Command cmdlet 来确定命令运行的时间。无需创建自己的方法来确定这一点。
  • 延迟需要是动态的,因为每封电子邮件需要不同的时间来发送。电子邮件服务器并不总是同时响应每个请求,因此您可能希望每 20 秒发送一封电子邮件,您实际上希望将第一个电子邮件延迟 15 秒,因为前一封电子邮件需要 5 秒才能发送,然后第二个延迟可能是 10 秒,因为上一封电子邮件需要 10 秒才能发送。
  • 那么您不能使用循环发送电子邮件吗?这样,在服务器响应之前不会发送下一个,您根本不必担心延迟。
  • 和往常一样,已经有人先到了...stackoverflow.com/questions/3513650/…
  • 如果你这样做了,你最终可能会在 1 小时内发送 100 个,然后接下来的 100 个需要 2 小时等等......这不会很均匀地分布它们并且会产生大量峰值和低谷取决于电子邮件服务器的响应时间。它特别需要电子邮件之间的延迟,并且它们需要尽可能恒定。

标签: powershell


【解决方案1】:

Measure-Command 将计时 PowerShell 执行。

【讨论】:

    【解决方案2】:

    如果不想使用Measure-Command,可以使用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!"
    }
    

    【讨论】:

    • 优秀...秒表方法绝对是最清晰的,输出消息对于了解正在发生的事情很有用。我会对其进行一些测试,但我相信这会奏效
    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多