【问题标题】:Exchange Automation ScriptExchange 自动化脚本
【发布时间】:2017-03-16 23:04:37
【问题描述】:

我正在尝试为 Exchange 编写一个 powershell 脚本,该脚本将查找特定邮箱在 1 个月的时间范围内收到的电子邮件数量,并将这些对象总数通过电子邮件发送给特定的个人。到目前为止我得到了:

$date = Get-Date -Format MM/dd/yyyy
$time = Get-Date -Format HH:mm:ss
$previousMonth = 

PS C:\> Get-MessageTrackingLog -Recipients:mailbox1.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object
PS C:\> Get-MessageTrackingLog -Recipients:mailbox2.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object
PS C:\> Get-MessageTrackingLog -Recipients:mailbox3.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object
PS C:\> Get-MessageTrackingLog -Recipients:mailbox4.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object
ps c:\> Send-MailMessage  -SmtpServer "server" -To "recipient email<recipient email>" -From "Monthly Mailbox Totals <email address>" -Subject "Monthly Mailbox Item Count"  -Body ""

我遇到的问题是:我不太清楚如何计算 -start 输入的日期范围,以便从当前日期和时间获取上个月的第一天,其次我我坚持如何从这个格式化到发送的电子邮件正文中获取总数。如果有帮助的话,我希望这个脚本在每个月的第一天运行。

任何提示将不胜感激在此先感谢您。

【问题讨论】:

  • 我在这里看到 2-3 个单独的问题。您应该尝试将自己限制在一个范围内。您可以使用一些日期方法来获取过去的日期,甚至保留当前的格式化逻辑。您甚至没有保存跟踪日志请求的结果。您是否还问如何自动化?

标签: powershell date datetime exchange-server


【解决方案1】:

System.DateTime 有一个函数 AddX(天、小时、分钟等)。有了这些,您可以指定确切的时间范围。然后,您只需将 Get-MessageTrackingLog 的返回值相加,然后将变量的内容发送出去。

$StartDate = (Get-Date).AddDays(-14) #Get the last 2 Weeks
$EndDate = Get-Date
$i = 0
$ += (Get-MessageTrackingLog -Recipients "RecipientA" -Start $StartDate -End $EndDate -EventId "Receive" -ResultSize unlimited | measure).Count
$ += (Get-MessageTrackingLog -Recipients "RecipientB" -Start $StartDate -End $EndDate -EventId "Receive" -ResultSize unlimited | measure).Count
Send-MailMessage -SmtpServer "server" -To "recipient" -From "sender" -Subject "Mailcount" -Body "Mail count for this month is $i"

如果您需要灵活地自己设置时间范围,您可以简单地使用类型加速器将您的日期字符串转换为DateTime

$StartDate = [DateTime]"3.10.17"

【讨论】:

  • 太棒了,非常感谢!使用 (Get-Date).AddDays(-14) 可以格式化吗?我需要它 MM/dd/yyyy HH:mm:ss 会是 (Get-Date).AddDays(-14) -Format MM/dd/yyyy HH:mm:ss
  • 您无需格式化即可在Get-MessageTrackingLog 中使用它。它只是使用当前的日期和时间并减去 14 天。如果您想将其格式化以用于输出目的,那么您可以这样做:(Get-Date).AddDays(-14).ToString("MM/dd/yyyy HH:mm:ss")
猜你喜欢
  • 2013-08-16
  • 2016-12-02
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多