将power-shell脚本交换为电子邮件分发列表所有者

时间:2016-01-26 17:16:57

标签: powershell email exchange-server

我在编写脚本进行交换时遇到了一些困难。我有一个环境,有一个混合环境。我正在尝试制作一个电源shell脚本来查找所有大型发行组并通过电子邮件发送组的所有者来清理它们。但是,我在提取所有者电子邮件和脚本的电子邮件部分的名称时遇到问题。

但是,有一些限制,我不能使用AD powershell,只能进行交换。而且我无法使用get-mailbox cmdlet。

add-pssnapin microsoft.exchange.management.powershell.e2010
set the scope of the search
Set-ADServerSettings -ViewEntireForest $true
$DistGroups = Get-DistributionGroup -ResultSize 2 
  ForEach ($Group in $DistGroups) {
    #Get each group details

    $MemberCount = (Get-DistributionGroupMember $Group).count  
    $GroupName = (Get-DistributionGroup $Group).DisplayName  
    $Owner = (Get-DistributionGroup $Group).ManagedBy
    $OwnerEmail = Get-recipient -identity $Owner | select PrimarySmtpAddress   
    $OwnerFN = Get-Recipient -identity  $Owner | Select FirstName 

    If ( $MemberCount > 50000) {

      #define email stuff

      $messageBody =  "Hi, <b>$OwnerFN,</b><p>" 
      $messageBody += "We are auditing distribution groups in our environment and your group, $GroupName, was flagged as being 
        <font color=red>really large</font>. The current member count is <font color=red> $MemberCount</font>.<p>" 
      $messageBody += "Please take steps to update the group and clear out unnecessary or old group members… <p>"
      $messageBody += "Thanks, <p>" 
      $messageBody += "The Exchange Admin Team"

      #Send the mail

      $email = New-Object System.Net.Mail.MailMessage
      $email.From = "Email_Group_Admin_Report@Internal.Mail.company.com"
      $email.To.Add("me@company.com")
      #$email.To.Add("$OwnerEmail")
      #$email.CC.Add("@company.com")
      #$email.BCC.Add("admin@company.com")
      $email.DeliveryNotificationOptions =           [System.Net.Mail.DeliveryNotificationOptions]::OnSuccess
      $email.IsBodyHtml = $True
      $email.Priority = [System.Net.Mail.MailPriority]::High
      $email.Subject = "Distribution Group Audit"
      $email.Body = $messageBody | Out-String
      $smtp = New-Object System.Net.Mail.SmtpClient
      $smtp.Host = "mail.compnany.com"
      $smtp.Send($email)       
    }
 }

我能够获得统计数据和发行版名称,我似乎无法通过属性或其他内容进行管理,它会发出整个主要电子邮件列表和Firstnames等等...由物业管理似乎没有出现....

2 个答案:

答案 0 :(得分:1)

  

$OwnerEmail = Get-recipient -identity $Owner | select PrimarySmtpAddress

这将返回一个对象,但是当您发送电子邮件时,您的行为就好像您有一个字符串。

  

email.To.Add("$OwnerEmail")

选项A:

($OwnerEmail = Get-recipient -identity $Owner).PrimarySmtpAddress 
email.To.Add($OwnerEmail)

选项B:

$OwnerEmail = Get-recipient -identity $Owner | select PrimarySmtpAddress
email.To.Add($OwnerEmail.PrimarySmtpAddress)

答案 1 :(得分:0)

我在输出格式上遇到了困难,但我终于按预期工作了。以为我会在这里发布工作脚本......也许你会发现它很有用。

add-pssnapin microsoft.exchange.management.powershell.e2010

# Find all Distros
$DistGroups = Get-DistributionGroup -ResultSize unlimited
  ForEach ($Group in $DistGroups) {
        #Get each group details
        if ($Group.managedby -ne $null) {

        $t = $Group.Managedby
        $t | foreach {  $Owner = $_.Name }  
        }
        else {
        $Owner = "Unknown"
        $DL_Name = $Group.displayname

         }
         $MemberCount = (Get-DistributionGroupMember $Group).count 


        if ($Owner -eq "Unknown") { echo "The owner is unknown!"
          } 
        #set membercount catch here
        elseIf ( $MemberCount -gt 2000) { 


            $OwnerEm = get-recipient $Owner | select PrimarySmtpAddress |           ft -HideTableHeaders | out-string
            #$OwnerEm = get-recipient me@company.com | select PrimarySmtpAddress | ft -HideTableHeaders | out-string

            #define email stuff

            $messageBody =  "Hi, <b>$Owner,</b><p>" 
            $messageBody += "We are auditing distribution groups in our environment and your group, $DL_Name, was flagged as being <font color=red>really large</font>. The current member count is <font color=red> $MemberCount</font>.<p>" 
            $messageBody += "Please take steps to update the group and clear out unnecessary or old group members… <p>"
            $messageBody += "Thanks, <p>" 
            $messageBody += "The Exchange Admin Team"

            #Send the mail

            $email = New-Object System.Net.Mail.MailMessage
            $email.From = "Email_Group_Admin_Report@Internal.Mail.company.com"
            #$email.To.Add("me@company.com")
            $email.To.Add("$OwnerEm")
            #$email.CC.Add("@company.com")
            #$email.BCC.Add("admin@company.com")
            $email.DeliveryNotificationOptions = [System.Net.Mail.DeliveryNotificationOptions]::OnSuccess
            $email.IsBodyHtml = $True
            $email.Priority = [System.Net.Mail.MailPriority]::High
            #$attachment = "C:\myfile.txt"
            #$email.Attachments.Add( $attachment )
            $email.Subject = "Distribution Group Audit"
            $email.Body = $messageBody | Out-String
            $smtp = New-Object System.Net.Mail.SmtpClient
            $smtp.Host = "mail.company.com"
            $smtp.Send($email)
             echo "the $DL_Name has a high member count. The member count is $MemberCount.  The manager has been sent and email at $OwnerEm"
            } 
            else {
            echo "the $DL_Name seems fine! The member count is $MemberCount.  The manager '$Owner' is doing great!"
                }
      }

我留下了echo语句,因此您可以通过控制台查看状态,或将它们传输到文件......或者其他内容......