当前位置: 代码迷 >> Exchange >> Exchange 2010 处在禁止发送用户自动收到来自IT的提醒邮件,而邮箱因为达到最大数据量被禁用的处理及对邮箱数据的清理
  详细解决方案

Exchange 2010 处在禁止发送用户自动收到来自IT的提醒邮件,而邮箱因为达到最大数据量被禁用的处理及对邮箱数据的清理

热度:622   发布时间:2016-05-02 06:39:08.0
Exchange 2010 处于禁止发送用户自动收到来自IT的提醒邮件,而邮箱因为达到最大数据量被禁用的处理及对邮箱数据的清理!

最近有个朋友需要提供一个脚本,来获取组织内的用户处于快满的用户列表,并能够10天后根据列表来自动清空他们邮箱数据,代码如下:

#requires -version 2
#脚本撰写人:徐鹏 如果需要脚本的话,[email protected],为我写脚本创建一些机会,提升更快。
#本脚本分为两个部分执行,一个是计算出当前邮箱用户禁止发送和邮箱被禁用的帐号,另外一个10天后清空邮箱。执行方法如下
#.\analyze-userdata -exportfulluser 主要计算出当前邮箱中满了的部分用户并调用smtp服务器发送给相关人员
#.\analyze-userdata -emptyuser   他会根据10天前生成的文件来自动清空文件中存在用户的邮件
#此脚本的目的大家如果仔细阅读可能就会发现他的功能,就是生成即将被禁止的邮箱,然后发送给管理员,管理员可以在10天之后手动的清空这些邮件

param
(
   [switch] $ExportFullUser,
   #执行导出命令Dash 符号
   [switch] $EmptyMailbox,
   #执行清空邮箱命令dash符号
   [string] $SmtpServer="tpkhubcasa.tpktest.com",
   #默认使用的smtp服务器,如果将来也会发往外部,需要设置邮件服务器的匿名relay 限制
   [string] $SendFrom="[email protected]",
   #设定发件人
   [string] $SendTo="[email protected]",
   #设定收件人
   [string] $Helpdeskusermail="[email protected]",
   #设定桌面支持人员,在用户邮箱无法发送邮件之后HELPDESK
   [string] $tmplogpath="c:\TMPLog",
   #设定产生日志的路径
   $encoding= [System.Text.Encoding]::unicode
   #定义邮件编码类型
)

#region Analyze Full user mailbox and send mail to user to tell mailbox full
if($ExportFullUser)
  #如果执行exportfulluser则执行如下指令
{
 if(!(Test-Path -Path $tmplogpath))
  #如果不存在日志产生目录
 {
 New-Item -ItemType directory -Path $tmplogpath
  #新建日志产生目录
 }
  $UserMailboxs=Get-Mailbox -Filter 'RecipientTypeDetails -eq "UserMailbox"' -ResultSize unlimited
  #查询出当前组织内邮箱用户
  $useralls=@()
  #数组赋初值
       foreach ($usermailbox in $UserMailboxs)
    #在获取的用户邮箱中轮询
      {
 
    $count++
    #计数器自加
    Write-Progress -Activity "calculating These mailbox now" -Status "calculating now.Please wait" -percentcomplete ($count /($UserMailboxs.count)*100)
    #为了让执行过程变得有可看性,也为了更好和用户进行界面接哦互
    $userdisplayname=(get-mailboxstatistics -identity $usermailbox).displayname
    #获取当前用户的显示名称
    $usersamaccount=(get-mailbox -identity $usermailbox).samaccountname
    #获取用户的samaccount名称
    $usermailaddress=(get-mailbox -identity $usermailbox).primarysmtpaddress
    #获取用户的主要邮件地址
    $userstatus=(get-mailboxstatistics -identity $usermailbox).storagelimitstatus
    #获取用户当前的存储状况
    $usermailboxsize=(get-mailboxstatistics -identity $usermailbox).totalitemsize.value.tobytes()
    #获取用户当前的用户邮箱大小,并转换成字节
    $usermailboxMB="{0:#.##}" -f ($usermailboxsize/1mb)
    #根据上面的字节数求出当前用户的邮箱大小,以MB为单位
     $userall=New-Object  psobject
  #新建一个PS对象
   
       if ($userstatus -like "ProhibitSend" )
    #用户邮箱禁止发送
   
   
    {   
    $userstatus1="您的邮箱将要达到邮箱限制,请您主动删除邮箱中不必要的邮件,不删除可能会对您后续的邮件收发将会造成一定的影响"
    #状态赋值
   
    $bodymessage="Dear "+$userdisplayname+":"+"
                     "+$userstatus1+"
        
        
                  如果对此有疑问,请联系helpdesk,Helpdesk电话为#5566                
                                    IT信息部"+(Get-Date -Format "yyyy-MM-dd")
              
         #生成邮件发送状态信息
   
    Send-MailMessage -From $SendFrom -To $usermailaddress -SmtpServer $SmtpServer -Body $bodymessage -Subject "您的邮件即将超过您允许的最大邮件收发限制,为了避免您影响您的收件,请删除部分邮件,谢谢!" -Encoding $encoding
    #将邮件发送给客户
    $userall|  Add-Member -MemberType NoteProperty -Name "samaccount" -Value $usersamaccount
    #为userall 的ps 对象添加一个属性,属性名称为samaccount
    $userall|  Add-Member -MemberType NoteProperty -Name "displayname" -Value $userdisplayname
    #为userall 的ps 对象添加一个属性,属性名称为displayname
    $userall|  Add-Member -MemberType NoteProperty -Name "userstatus" -Value $userstatus
    #为userall 的ps 对象添加一个属性,属性名称为 userstatus
    $userall|  Add-Member -MemberType NoteProperty -Name "usermailboxMB" -Value $usermailboxMB
    #为userall 的ps 对象添加一个属性,属性名称为usermailboxMB
    $userall|  Add-Member -MemberType NoteProperty -Name "usermailaddress" -Value $usermailaddress
    #为userall 的ps 对象添加一个属性,属性名称为
   
    $useralls=$useralls+$userall
    #将对象赋值给数组
   }
   if ($userstatus -like "mailboxdisabled" )
   #如果用户状态等于Maildisabled状态则执行如下命令
   {
    $userstatus1="此邮箱已经由于空间使用过大而被Exchange禁用,请主动协助处理此邮箱,谢谢!"
   
   
    $bodymessage="Dear Helpdesk及系统管理员:"+"
   
         "+"此邮箱用户为:"+$userdisplayname+"的所属邮箱,邮箱地址为"+$usermailaddress+"目前"+$userstatus1
   
    Send-MailMessage -From $SendFrom -To $Helpdeskusermail -Cc $SendTo -SmtpServer $SmtpServer -Body $bodymessage -Subject "以下用户已经由于邮件过多而无法再进行邮件收发,请Helpdesk跟踪,谢谢!" -Encoding $encoding
   #发送邮箱告诉helpdesk 及系统管理员邮箱因为过大而无法发送邮件,通知helpdesk人员处理
      
   }
 }
  $tmplogfile=$tmplogpath+"\"+$(get-date -Format "yyyy-MM-dd")+".csv"
  #为创建文件名字做好初值
  $useralls| Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile
  #生成符合Probhibit 禁止发送用户列表
   Send-MailMessage -From $SendFrom -To $SendTo -SmtpServer $SmtpServer -subject "请检查附件中的超过使用量的用户" -Body "Dear Sir: 请检查附件中超过邮件使用量的用户。如果附件为空,说明没有超过限制的用户。谢谢!" -Attachments $tmplogfile -Encoding $encoding
  #发送邮件给管理员当前邮箱即将达到禁止邮箱的名单      
   }
#endregion

#region Empty user mailbox
if ($EmptyMailbox)
  #执行清除命令
{
 $lastshowdate=(Get-Date).adddays(-10).tostring("yyyy-MM-dd")
 #生成上一次产生文件的日期,这里我们设置的为10天之前,并将日期型转换为字符型
 
 $tendaysfile=$tmplogpath+"\"+$lastshowdate+".csv"
 #生成上一次产生的文件
 
 
 if (Test-Path -Path $tendaysfile)
 #验证产生的文件是否存在
    {
 $emptyarray=Import-Csv -Path $tendaysfile
 #将从文件中的数据赋值给emptyarray数组
 $emptycountall=$emptyarray.count
 #计算数据中元素的行数
 $emptyaccounts=@()
 #为用户数组赋初值
 for ($n=0;$n -lt $emptycountall;$n++)
 #基于数据用户数量的循环
 {
 $emptyaccount=$emptyarray[$n].samaccount 
 #将用户的samaccount 赋值给emptyaccount
 $emptyaccounts=$emptyaccounts+$emptyaccount
 #将emptyaccount 数据读出赋给数组
 }
  foreach ($users in $emptyaccounts)
  #根据读出的用户列进行循环
  {
   $emptycount++
   #计数器自加
   $messageempty="Now Empty"+$users+"'s Mailbox.Please Wait"
   #赋值
   Write-Progress -Activity "Empty mailbox now,please wait" -status $messageempty  -PercentComplete ($emptycount/$emptycountall)
   #增强与用户的交互,能够根据用户的状态确定当前执行的位置
   search-mailbox -identity $users -deletecontent -force
   #清空当前用户邮件
   $subjectmessage="User   "+$users+"'s Mailbox has been empty,User can receive Mail now"
   #赋值
   $bodyitem="Dear Sir:
                 User    "+$users+"的邮箱已经被清空,请告知用户"
   Send-MailMessage -SmtpServer $SmtpServer -From $SendFrom -To $SendTo -Subject $subjectmessage -Body $bodyitem -Encoding $encoding
    #发送邮件到管理员告知清空对象
  }
 Remove-Item -Path $tendaysfile -Force
 #移除相应的用户文件
  Send-MailMessage -SmtpServer $SmtpServer -From $SendFrom -To $SendTo -Subject "所有禁止发送的用户的邮件都已经被清空" -Body "所有已经禁止发送邮件的用户邮件均已经呗清空" -Encoding $encoding
 #发送整体清空邮件告知管理员
 }
 
 else
 {
  Send-MailMessage -From $SendFrom -To $SendTo -SmtpServer $SmtpServer -subject "文件没有产生,可能你没有禁止发送的用户" -Body "Dear Sir: 文件没有生成,可能您企业中没有人超过大小限制"  -Encoding $encoding
 #最开始的检查文件对象存在的另一种情况,列表文件没有产生。没有删除对象
 }
 
 
 
}

#endregion

 

执行方法及介绍请参考另一个博客!

  相关解决方案