【发布时间】: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-Commandcmdlet 来确定命令运行的时间。无需创建自己的方法来确定这一点。 -
延迟需要是动态的,因为每封电子邮件需要不同的时间来发送。电子邮件服务器并不总是同时响应每个请求,因此您可能希望每 20 秒发送一封电子邮件,您实际上希望将第一个电子邮件延迟 15 秒,因为前一封电子邮件需要 5 秒才能发送,然后第二个延迟可能是 10 秒,因为上一封电子邮件需要 10 秒才能发送。
-
那么您不能使用循环发送电子邮件吗?这样,在服务器响应之前不会发送下一个,您根本不必担心延迟。
-
和往常一样,已经有人先到了...stackoverflow.com/questions/3513650/…
-
如果你这样做了,你最终可能会在 1 小时内发送 100 个,然后接下来的 100 个需要 2 小时等等......这不会很均匀地分布它们并且会产生大量峰值和低谷取决于电子邮件服务器的响应时间。它特别需要电子邮件之间的延迟,并且它们需要尽可能恒定。
标签: powershell