Health Check in Exchange 2007 Scripting

Hi All,
I have been looking around for scripts which would help me perform regularised health checks in my enviornment. After lot of googling i was able to get a script which would meet my requirements. However i have a few challenges involved in extracting some
more information:
1. Mailbox Store Size, Free Diskspace percentage for mailbox servers
2. Remote Mail flow Tests & Mailflow test to every exchange 2007 mailbox servers in org.
3. Automating Email of collected data (in HTML) to Administrator.
4. Executing the script Automatically without triggering it from Exchange Management Shell.
Script Below
param( [string] $auditlist)
Function Get-CustomHTML ($Header){
$Report = @"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html><head><title>$($Header)</title>
<META http-equiv=Content-Type content='text/html; charset=windows-1252'>
<meta name="save" content="history">
<style type="text/css">
DIV .expando {DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 8pt; RIGHT: 8px; COLOR: #ffffff; FONT-FAMILY: Arial; POSITION: absolute; TEXT-DECORATION: underline}
TABLE {TABLE-LAYOUT: fixed; FONT-SIZE: 100%; WIDTH: 100%}
*{margin:0}
.dspcont { display:none; BORDER-RIGHT: #B1BABF 1px solid; BORDER-TOP: #B1BABF 1px solid; PADDING-LEFT: 16px; FONT-SIZE: 8pt;MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; WIDTH: 95%; COLOR: #000000; MARGIN-RIGHT:
0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; BACKGROUND-COLOR: #f9f9f9}
.filler {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 43px; BORDER-LEFT: medium none; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP:
4px; BORDER-BOTTOM: medium none; POSITION: relative}
.save{behavior:url(#default#savehistory);}
.dspcont1{ display:none}
a.dsphead0 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR:
#FFFFFF; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #CC0000}
a.dsphead1 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR:
#ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #7BA7C7}
a.dsphead2 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR:
#ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #7BA7C7}
a.dsphead1 span.dspchar{font-family:monospace;font-weight:normal;}
td {VERTICAL-ALIGN: TOP; FONT-FAMILY: Tahoma}
th {VERTICAL-ALIGN: TOP; COLOR: #CC0000; TEXT-ALIGN: left}
BODY {margin-left: 4pt}
BODY {margin-right: 4pt}
BODY {margin-top: 6pt}
</style>
<script type="text/javascript">
function dsp(loc){
   if(document.getElementById){
      var foc=loc.firstChild;
      foc=loc.firstChild.innerHTML?
         loc.firstChild:
         loc.firstChild.nextSibling;
      foc.innerHTML=foc.innerHTML=='hide'?'show':'hide';
      foc=loc.parentNode.nextSibling.style?
         loc.parentNode.nextSibling:
         loc.parentNode.nextSibling.nextSibling;
      foc.style.display=foc.style.display=='block'?'none':'block';}} 
if(!document.getElementById)
   document.write('<style type="text/css">\n'+'.dspcont{display:block;}\n'+ '</style>');
</script>
</head>
<body>
<b><font face="Arial" size="5">$($Header)</font></b><hr size="8" color="#CC0000">
<font face="Arial" size="1"><b>Version 1  |M & C | <A HREF='http://mail.exchange.com'>mail.exchange.com</A></b></font><br>
<font face="Arial" size="1">Report created on $(Get-Date)</font>
<div class="filler"></div>
<div class="filler"></div>
<div class="filler"></div>
<div class="save">
Return $Report
Function Get-CustomHeader0 ($Title){
$Report = @"
 <div class="dspcont0">
 <h1><a href="javascript:void(0)" class="dsphead0" onclick="dsp(this)">
 <span class="expando">show</span>$($Title)</a></h1>
 <div class="dspcont0">
Return $Report
Function Get-CustomHeader ($Num, $Title){
$Report = @"
 <h2><a href="javascript:void(0)" class="dsphead$($Num)" onclick="dsp(this)">
 <span class="expando">show</span>$($Title)</a></h2>
 <div class="dspcont">
Return $Report
Function Get-CustomHeaderClose{
 $Report = @"
  </DIV>
  <div class="filler"></div>
Return $Report
Function Get-CustomHeader0Close{
 $Report = @"
  </DIV>
  <div class="filler"></div>
Return $Report
Function Get-CustomHTMLClose{
 $Report = @"
</div>
</body>
</html>
Return $Report
Function Get-HTMLTable{
 param([array]$Content)
 $HTMLTable = $Content | ConvertTo-Html
 $HTMLTable = $HTMLTable -replace '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', ""
 $HTMLTable = $HTMLTable -replace '<html xmlns="http://www.w3.org/1999/xhtml">', ""
 $HTMLTable = $HTMLTable -replace '<head>', ""
 $HTMLTable = $HTMLTable -replace '<title>HTML TABLE</title>', ""
 $HTMLTable = $HTMLTable -replace '&lt;', "<"
 $HTMLTable = $HTMLTable -replace '&gt;', ">"
 $HTMLTable = $HTMLTable -replace '</head><body>', ""
 $HTMLTable = $HTMLTable -replace '</body></html>', ""
 Return $HTMLTable
Function Get-HTMLLink ($activeURL){
$Report = @"
<a href=$activeURL>$activeURL</a>
Return $Report
Function Get-Ink ([String]$inData){
[String]$inclPercentage = @(35..100)
$positive = ($inclPercentage, 'Success', 'Ready', 'Running', 'OK', 'True', 'Information')
If ($positive -match $inData)
$Report = @"
<font color='#009900'>$inData</font>
Else
$Report = @"
<font color='#FF0000'>$inData</font>
Return $Report
Function Get-HTMLBasic ($Detail){
$Report = @"
<TABLE>
 <tr>
  <td width='75%'>$($Detail)</td>
 </tr>
</TABLE>
Return $Report
Function Get-HTMLDetail ($Heading, $Detail){
$Report = @"
<TABLE>
 <tr>
 <th width='25%'><b>$Heading</b></font></th>
 <td width='75%'>$($Detail)</td>
 </tr>
</TABLE>
Return $Report
$input | foreach {$targets += @($_)}
If ((Test-Path variable:\targets) -eq $True){
   Write-Host "Server list input detected on pipeline" -ForegroundColor Yellow
Else{
 if ($auditlist -eq ""){
   Write-Host "No server list specified, getting all Exchange 2007 servers" -ForegroundColor Yellow
   $targets = Get-ExchangeServer | Where-Object {$_.IsExchange2007OrLater -eq $True}
  else
   if ((Test-Path $auditlist) -eq $false)
    Write-Host "Invalid server list specified: $auditlist" -ForegroundColor DarkRed
    exit
   else
    Write-Host "Using Audit list: $auditlist" -ForegroundColor Cyan
    $Targets = Get-Content $auditlist
$now = Get-Date
#Custom Expressions
$latencyMS = @{Name="Latency(MS)";expression={[Math]::Round(([TimeSpan] $_.Latency).TotalMilliSeconds)}}
$MessageLatencyTime = @{Name="MessageLatencyTime";expression={[Math]::Round(([TimeSpan] $_.Latency).TotalMilliSeconds)}}
$hotLink = @{Name="URL";expression={Get-HTMLLink ($_.URL)}}
$colourResult = @{Name="Result";expression={Get-Ink ($_.Result)}}
$colourStatus = @{Name="Status";expression={Get-Ink ($_.Status)}}
$colourType = @{Name="Status";expression={Get-Ink ($_.Type)}}
$newResult = @{Name="Result";expression={If ($_.Result.ToString() -ne 'Success'){Get-Ink ('Failure')} Else {Get-Ink ('Success') }}}
$fullReport = Get-CustomHTML "Exchange 2007 "
$fullReport += Get-CustomHTMLClose
Foreach ($Target in $Targets){
Write-Host "Collating Detail for $Target" -ForegroundColor Yellow
 Write-Host "..getting basic computer configuration"
 $ComputerSystem = Get-WmiObject -computername $Target Win32_ComputerSystem
 switch ($ComputerSystem.DomainRole){
  0 { $ComputerRole = "Standalone Workstation" }
  1 { $ComputerRole = "Member Workstation" }
  2 { $ComputerRole = "Standalone Server" }
  3 { $ComputerRole = "Member Server" }
  4 { $ComputerRole = "Domain Controller" }
  5 { $ComputerRole = "Domain Controller" }
  default { $ComputerRole = "Information not available" }
 $OperatingSystems = Get-WmiObject -computername $Target Win32_OperatingSystem
 $TimeZone = Get-WmiObject -computername $Target Win32_Timezone
 $Keyboards = Get-WmiObject -computername $Target Win32_Keyboard
 $SchedTasks = Get-WmiObject -computername $Target Win32_ScheduledJob
 $BootINI = $OperatingSystems.SystemDrive + "boot.ini"
 $RecoveryOptions = Get-WmiObject -computername $Target Win32_OSRecoveryConfiguration
 $exServer = Get-ExchangeServer | where {$_.Name -eq "$Target"}
 $exVersion = "Version " + $exServer.AdminDisplayVersion.Major + "." + $exServer.AdminDisplayVersion.Minor + " (Build " + $exServer.AdminDisplayVersion.Build + "." + $exServer.AdminDisplayVersion.Revision + ")"
 switch ($ComputerRole){
  "Member Workstation" { $CompType = "Computer Domain"; break }
  "Domain Controller" { $CompType = "Computer Domain"; break }
  "Member Server" { $CompType = "Computer Domain"; break }
  default { $CompType = "Computer Workgroup"; break }
 $LBTime=$OperatingSystems.ConvertToDateTime($OperatingSystems.Lastbootuptime)
 $MyReport += Get-CustomHeader0  "$Target - Role(s): $($exServer.ServerRole)"
 $MyReport += Get-CustomHeader "2" "Basic Server Information"
  $MyReport += Get-HTMLDetail "Computer Name" ($ComputerSystem.Name)
  $MyReport += Get-HTMLDetail "Computer Role" ($ComputerRole)
  $MyReport += Get-HTMLDetail "Exchange Role(s)" ($exServer.ServerRole)
  $MyReport += Get-HTMLDetail "Last System Boot" ($LBTime)
  $MyReport += Get-CustomHeaderClose
  Write-Host "..getting logical disk configuration"
  $Disks = Get-WmiObject -ComputerName $Target Win32_LogicalDisk
  $MyReport += Get-CustomHeader "2" "Logical Disk Configuration"
   $LogicalDrives = @()
   Foreach ($LDrive in ($Disks | Where {$_.DriveType -eq 3})){
    $Details = "" | Select "Drive Letter", Label, "File System", "Disk Size (GB)", "Disk Free Space", "% Free Space"
    $Details."Drive Letter" = $LDrive.DeviceID
    $Details.Label = $LDrive.VolumeName
    $Details."File System" = $LDrive.FileSystem
    $Details."Disk Size (GB)" = [math]::round(($LDrive.size / 1GB))
    $Details."Disk Free Space" = [math]::round(($LDrive.FreeSpace / 1GB))
    $Details."% Free Space" = Get-Ink ([Math]::Round(($LDrive.FreeSpace /1GB) / ($LDrive.Size / 1GB) * 100))
    $LogicalDrives += $Details
   $MyReport += Get-HTMLTable ($LogicalDrives)
  $MyReport += Get-CustomHeaderClose
  if ($exServer.ServerRole -like "*ClientAccess*")
  {$MyReport += Get-CustomHeader "2" "OWA Connectivity"
   Write-Host "..performing OWA connectivity test"
   $colOWAResults = Test-OwaConnectivity -ClientAccessServer $Target
   $MyReport += Get-HTMLTable ($colOWAResults | select MailboxServer, $hotLink, Scenario, $colourResult, $latencyMS, Error)
   $MyReport += Get-CustomHeaderClose
Write-Host "..getting queue details"
  if ($exServer.ServerRole -like "*HubTransport*")
  $MyReport += Get-CustomHeader "2" "Queue Information"
  $colQs = Get-Queue -server $Target
  $MyReport += Get-HTMLTable ($colQs | Select-Object NextHopDomain, $colourStatus, MessageCount, NextRetryTime)
  $MyReport += Get-CustomHeaderClose
  Write-Host "..getting mailbox database information"
  $spaceLog=[System.Diagnostics.EventLog]::GetEventLogs($target) | where {($_.LogDisplayName -eq "Application")}
  $db = @{Name="database";Expression={$_.ReplacementStrings[1]}}
  $freeMB = @{Name="MB";Expression={[int]$_.ReplacementStrings[0]}}
  $whiteSpace = $spaceLog.entries | where {($_.TimeWritten -ge $now.AddDays(-1))} | where {($_.EventID -eq "1221")} | select $db,$freeMB
  $ws = @{Name="White Space";expression={}}
  if ($exServer.ServerRole -like "*Mailbox*")
   $MyReport += Get-CustomHeader "2" "Mailbox Stores"
   $colMailboxStores = Get-MailboxDatabase -Server $Target -Status | Sort-Object Name
   $storeTable = @()
   Foreach ($objMailboxStore in $colMailboxStores)
    [string]$totalUsers = (get-mailbox -database $objMailboxStore).count
    [string]$empty = $totalUsers.Length -eq 0
    if ($empty -eq 'True')
     [string]$totalUsers = "0"
    $storeDetails = "" | Select Name, Mounted, "Total Users", "White Space", LastFullBackup
    $storeDetails.Name = $objMailboxStore.Name
    $storeDetails.Mounted = Get-Ink ($objMailboxStore.Mounted)
    $storeDetails."Total Users" = $totalUsers
    $storeDetails."White Space" = (($whitespace | where {$_.database -match $objMailboxStore.Name} | select -last 1).mb)
    $storeDetails.LastFullBackup = $objMailboxStore.LastFullBackup
    $storeTable += $storeDetails
    $MyReport += Get-HTMLTable ($storeTable)
   $MyReport += Get-CustomHeaderClose
   $MyReport += Get-CustomHeader "2" "MAPI Connectivity"
   Write-Host "..performing MAPI connectivity test"
   $colMAPIResults = Test-MAPIConnectivity -Server $Target
    $MyReport += Get-HTMLTable ($colMAPIResults | select Database, $newResult, $latencyMS, Error)
   $MyReport += Get-CustomHeaderClose
   $MyReport += Get-CustomHeader "2" "Mailflow Test"
   Write-Host "..performing Mailflow test"
   $colMailflowResults = Test-Mailflow -Server $Target
    $MyReport += Get-HTMLTable ($colMailflowResults | select TestMailflowResult, $MessageLatencyTime)
   $MyReport += Get-CustomHeaderClose
  Write-Host "..getting Exchange services"
  $ListOfServices = (gwmi -computer $Target -query "select * from win32_service where Name like 'MSExchange%' or Name like 'IIS%' or Name like 'SMTP%' or Name like 'POP%' or Name like 'W3SVC%'")
  $MyReport += Get-CustomHeader "2" "Exchange Services"
   $Services = @()
   Foreach ($Service in $ListOfServices){
    $Details = "" | Select Name,Account,"Start Mode",State,"Expected State"
    $Details.Name = $Service.Caption
    $Details.Account = $Service.Startname
    $Details."Start Mode" = $Service.StartMode
    If ($Service.StartMode -eq "Auto")
      if ($Service.State -eq "Stopped")
       $Details.State = $Service.State
       $Details."Expected State" = Get-Ink ("Unexpected")
     If ($Service.StartMode -eq "Auto")
      if ($Service.State -eq "Running")
       $Details.State = $Service.State
       $Details."Expected State" = Get-Ink ("OK")
     If ($Service.StartMode -eq "Disabled")
      If ($Service.State -eq "Running")
       $Details.State = $Service.State
       $Details."Expected State" = Get-Ink ("Unexpected")
     If ($Service.StartMode -eq "Disabled")
      if ($Service.State -eq "Stopped")
       $Details.State = $Service.State
       $Details."Expected State" = Get-Ink ("OK")
     If ($Service.StartMode -eq "Manual")
      $Details.State = $Service.State
      $Details."Expected State" = Get-Ink ("OK")
     If ($Service.State -eq "Paused")
      $Details.State = $Service.State
      $Details."Expected State" = Get-Ink ("OK")
    $Services += $Details
    $MyReport += Get-HTMLTable ($Services)
   $MyReport += Get-CustomHeaderClose
    $eventLogs=[System.Diagnostics.EventLog]::GetEventLogs($Target) | where {($_.LogDisplayName -eq "Application") -OR ($_.LogDisplayName -eq "System")}
    $warningEvents = @()
    $errorEvents = @()
    $LogSettings = @()
 $MyReport += Get-CustomHTMLClose
 $fullReport += $MyReport
 $MyReport = $null
 $Date = Get-Date
 $Filename = ".\" + "Exchange_Health" + "_" + $date.Hour + $date.Minute + "_" + $Date.Day + "-" + $Date.Month + "-" + $Date.Year + ".htm"
 $fullReport | out-file -encoding ASCII -filepath $Filename
 Write "Audit saved as $Filename"
Invoke-Item $Filename

please refer to my scripts below, it should get you started.
http://www.myexchangeworld.com/2010/03/powershell-disk-space-html-email-report/
http://www.myexchangeworld.com/2010/07/powershell-script-to-monitor-exchange-server-2010-services-email-report/
you can customsise this to your needs and add relevant information.
cheers
thiyagu
Thiyagu | MCTS/MCITP - Exchange 2007 | MCSE 2003[Messaging] | http://www.myExchangeWorld.com. This posting is provided "AS IS" with no warranties, and confers no rights.

Similar Messages

  • SCOM health check on Exchange 2010 servers

    Hi,
    Does SCOM have any built-in function to perform
    health check on Exchange 2010 servers?

    You can check health check of Exchange 2010 by install management pack of Exchange 2010.
    Here's management pack of exchange 2010
    http://www.microsoft.com/en-us/download/details.aspx?id=692
    Before Import management Pack and how to configure it, you can check below link
    http://technet.microsoft.com/en-us/library/ee758051%28v=exchg.140%29.aspx
    Please remember, if you see a post that helped you please click "Vote As Helpful" and if it answered your question, please click "Mark As Answer"

  • Database redundansy health check failed ( Exchange 2010 sp3 )

    Hello all ,
    One of the mailbox server have been getting the following error in in application , sometimes
    RealCopyQueu  is 256 and sometimes 0 and healthy  .
    Kindly share how can resolve it please

    Hi,
    I suggest we refer to the following article to troubleshoot this issue. Run
    Database Redundancy Check Script.
    http://social.technet.microsoft.com/Forums/exchange/en-US/b1cfbc4b-b17d-4148-adce-1a565d0f5746/exchange-2010-event-id-4113-msexchangerepl-health-check-failed
    Regards,
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact
    [email protected]
    Simon Wu
    TechNet Community Support

  • Exchange 2013 SP1 Readiness Checks: No Exchange 2007 server detected

    Hi there,
    We are planning to upgrade our current Exchange 2007 server with the new Exchange 2013 SP1. I have been following Exchange Server Deployment Assistant to assist me with this task. Only schema update (setup /PrepareSchema) had been done so
    far. I didn’t run setup /PrepareAD command manually because I wasn’t sure if I need to provide ‘Organisation Name’ with it or not?! I have installed all of the prerequisites as noted in the Microsoft documentation.
    Now, I am a bit confuse with the ‘Readiness Checks’ page during graphical user installation of Exchange 2013 SP1 setup on Windows 2012 R2. Windows 2012 R2 server has all available updates applied.
    ===
    Warning:
    Setup will prepare the organization for Exchange 2013 by using 'Setup /PrepareAD'. No Exchange 2010 server roles have been detected in this topology. After this operation, you will not be able to install any Exchange 2010 servers.
    For more information, visit: http://technet.microsoft.com/library(EXCHG.150)/ms.exch.setupreadiness.NoE14ServerWarning.aspx
    ===
    I get the message why setup wants to run preparation for the Ex2013 with the ‘Setup /PrepareAD’. But, why ‘No Exchange 2010 server role have been detected in this topology’?! Ok, in my case setup doesn’t detect Exchange 2007 server. Is that ok to proceed
    with the installation or something else needs to be done first?
    Thanks in advance.

    I need Exchange guru advice here please. Since we already have Exchange 2007 SP3 RU 10 in our Windows 2008R2 Active Directory domain here I need to be 100% confident that pushing Exchange 2013 SP1 “Install” will not override our existing Ex2007 environment.
    That would be a huge disaster!
    Microsoft is saying that: “Microsoft Exchange Server 2013 Setup displayed this warning because
    no Exchange Server 2010 or Exchange Server 2007 server roles exist in the organization.”
    http://technet.microsoft.com/library(EXCHG.150)/ms.exch.setupreadiness.NoE14ServerWarning.aspx
    Ok, I get the message about if I continue with Exchange Server 2013 installation, I won’t be able to add Exchange 2010 or Exchange 2007 servers to the organization at a future date..., and why would I need to do that anyway?!
    Microsoft wording about “some solutions may require the use...” are very confusing since we will require to consider “Coexistence or migration requirements"
    Perhaps, before running Exchange 2013 SP1 setup I need to run setup for preparing AD without “Organisation Name” parameter?! Something like this:
    setup /PrepareAD  /IAcceptExchangeServerLicenseTerms

  • Exchange 2007 script problem

    If I comment the first line and uncomment the second the script runs as expected, or when it's run for one individual contact.  But when it's run against the entire OU it fails and returns the error at the bottom of the posting.  Any ideas?
    $MC = get-mailcontact -organizationalunit "OU=myOU,DC=domain,DC=com" -resultsize Unlimited
    #$MC = get-mailcontact "George"
    ForEach($Contact in $MC) {
    $TargetContactExternalAddress = $Contact.ExternalEmailAddress
    $TargetContactExternalAddressString = [string]$TargetContactExternalAddress.AddressString
    Set-mailcontact $Contact.Name -WindowsEmailAddress $TargetContactExternalAddressString
    WARNING: Object domain.com/myOU/George has been corrupted and it is in an inconsistent state. The following validation errors have occurred
    WARNING: Could not convert property WindowsEmailAddress to type SmtpAddress. "George" is not a valid SMTP address
    WARNING: Object domain.com/myOU/Nick has been corrupted and it is in an inconsistent state. The following validation errors have occurred:
    WARNING: Could not convert property WindowsEmailAddress to type SmtpAddress. "NicK" is not a valid SMTP address
    ETC

    Hi FromDun,
    Agree with Tony, this issue occurred because the variable $TargetContactExternalAddressString haven't returned as a smtpaddress.
    To handle the error, you can also try and catch to get the failed contacts:
    $MC = get-mailcontact -organizationalunit "OU=myOU,DC=domain,DC=com" -resultsize Unlimited
    #$MC = get-mailcontact "George"
    ForEach($Contact in $MC) {
    try{
    $TargetContactExternalAddress = $Contact.ExternalEmailAddress
    $TargetContactExternalAddressString = [string]$TargetContactExternalAddress.AddressString
    Set-mailcontact $Contact.Name -WindowsEmailAddress $TargetContactExternalAddressString -ErrorAction stop}
    catch{
    Write-Host "$($contact.name) get error $($_.exception.message)"
    If there is anything else regarding this issue, please feel free to post back.
    Best Regards,
    Anna Wang

  • DPM 2007/2010 Health Check Tools

    Hi there,
    I've had a look through the existing forum threads, but am unable to find an answer to my query.
    I am looking to find a range of DPM health check tools, or Powershell Scripts, that would help me perform a Health Check on a 2007 environment, with a view to an eventual upgrade path to 2010/2012
    I am hoping to avoid analysing each event ID and every backup operation in order to make a report to management.
    Many thanks in advance
    Rory

    Hi,
    This is the only DPM Health Check script available. Here is the link:
    https://gallery.technet.microsoft.com/DPM-Health-Check-9628e68f
    My Blog | www.buchatech.com | www.systemcenterportal.com
    If you found this post helpful, please give it a "Helpful" vote. If it answered your question, remember to mark it as an "Answer". This posting is provided "AS IS" with no warranties and confers no rights! Always test ANY suggestion
    in a test environment before implementing!

  • Exchange 2007 - Exchange 2013 Mailbox Migration Issues

    Exchange 2013 -  Mail Flow is working.   OWA Access is great.   We have issues connecting Outlook 2010 Clients.  If I create a new user and mailbox Outlook 2010 works fine.   However, if we migrate a user's mailbox to the new Exchange
    2013 server.  Outlook Web (OWA) works and mail flow but "OUTLOOK 2010 can not connect to the new server"  There is something different about a newly created account and a migrated account.  Any help would be great.   I did check
    inheritance in AD and it was on for these accounts.  This occurs with any account migrated to the new server.

    1. Could you double check your Exchange 2007 Internal Autodiscover URI - it should be pointing to Exchange 2013. All clients should be receiving their autodiscover config from the Exchange 2013 server. Based on the client's mailbox location, Exchange 2013
    generates and provides the correct information.
    2. If the autodiscover URI is "autodiscover.yourdomain.com" and you've configured Split-Brain DNS or Pin-Point DNS zones on the local network, make sure the name is resolved to Exchange 2013 internal IP address.
    Step by Step Screencasts and Video Tutorials

  • Powershell script for Exchange Server 2010 health check

    People,
    Can anyone here please share the Powershell to check the Exchange Server health and functionality after patching and Service Pack update?
    I need to test multiple servers in my AD environment.
    Thanks
    /* Server Support Specialist */

    Hi,
    In Exchange 2010, you can use the Test-ServiceHealth cmdlet to test whether all the Microsoft Windows services that Exchange requires on a server have started.
    A related article about this command.
    https://technet.microsoft.com/en-us/library/aa998852(v=exchg.150).aspx
    You can also use the EXBPA tool to do Exchange server health check. You can look at the blog below.
    http://blogs.msdn.com/b/douggowans/archive/2007/06/06/run-your-own-exchange-server-health-check-the-tools.aspx
    Hope this is helpful to you.
    Best regards,
    If you have feedback for TechNet Subscriber Support, contact
    [email protected]
    Belinda Ma
    TechNet Community Support

  • Exchange 2013 Daily Health Check Script

    Hi All,
    I recently migrated from Exchange 2010 to Exchange 2013. Prior to the migration the daily health check was being used daily to send my team and I the HTML report.
    I have downloaded the new v1.07 script and followed the same rules and settings I used for Exchange 2010 when setting up the script.
    The script only runs now via Exchange shell and does not send the HTML report and I am unable to run the script via a batch file that called the ./ps1 file in a windows command prompt and am also unable to as a result, use the task scheduler to schedule
    this task.
    I am desperately in need of getting this morning report as its been so useful, I cant do without it now.
    Any advise would be greatly appreciated.
    Thanks so much
    Alton

    So, could you please check this link, it provide the solution to check the daily health of exchange 2013 :
    http://exchangeserverpro.com/troubleshooting-exchange-server-2013-with-test-cmdlets/

  • Exchange 2010 Org Health check telling me I need Enterprise CALs, bug?

    My new install of Exchange 2010 Enterprise organizational health check  is telling me I also need Enterprise CALs for all of my test users. This does not seem right since I have not enabled any features listed as ecal features at http://www.microsoft.com/exchange/en-us/licensing-exchange-server-email.aspx#Exchange2010CAL
    in fact the setup is a very basic one. The test users were migrated from an existing exchange 2007 server but again no enterprise features were enabled there. Is there a way to tell what it thinks I need enterprise CALs for? Is this a bug? I saw a notice that
    the RTM version had counted the default exchange active sync policy as an ecal requirement but I figured this would have been fixed by now.

    looks like it has reared its head in update rollup 8-v2 for sp3. Last year I was playing around with the archive mailbox to see if it was something we may want to implement. At the time our enterprise cal requirements went from 0 to 1 for the test system
    I was using. This ended up being something we did not want to pursue at the time so I disabled the option on the account. Happened to run the organizational health link today and now it says that all accounts need enterprise cals. Did not appear to be an issue
    in update 7. 

  • Exchange 2010 Health check

    Dear all,
    if the exchanger 2010 run DAG (two servers). How to mak the health check very day and health check report will be sent by email .
    thank you
    john

    Hi
    Maybe you can run exbpa everyday and export it share folder.
    You can read this blog.
    How to Schedule an Exchange BPA Scan in Exchange Server 2010
    If you want to send email, you have to write script for it.
    Terence Yu
    TechNet Community Support

  • Exchange 2010 health-checks with encryption and ntlm auth

    Hi everybody,
    I will be forced to implement extended health-ckecks for Exchange 2010 CAS Servers. So the cisco design guide does not help
    Exchange2010 CAS Service needs ntlm auth for many services by default. http://technet.microsoft.com/en-us/library/bb331973.aspx
    Now with SP1 also for pop3 and imap4. I have not found any option to use ntlm by default.
    The next problem is encryption.
    Health-checks with encryption are not integrated in cisco ace 4710 by default.
    As an alternative to try a scripted health-check with tcl script is an option but needs more investigation and is timeconsuming.
    I watched for other vendors solution, they use e.g. external imported shell scripts with curl (curl -s --ntlm -k -X POST ...) to do a health-check with ntlm. That would be fine at the moment to beat the requirement of extendet health-checks.
    But maybe it is only ntlm verion 1, I do not know what happens if it comes to ntlm version 2.
    Kerberos authentication is a much bigger problem, but at the moment not a requirement.
    Does anybody has some hints or also a tcl script for exchange health-checks ?
    Best Regards
    Alois

    Hi everybody,
    I will be forced to implement extended health-ckecks for Exchange 2010 CAS Servers. So the cisco design guide does not help
    Exchange2010 CAS Service needs ntlm auth for many services by default. http://technet.microsoft.com/en-us/library/bb331973.aspx
    Now with SP1 also for pop3 and imap4. I have not found any option to use ntlm by default.
    The next problem is encryption.
    Health-checks with encryption are not integrated in cisco ace 4710 by default.
    As an alternative to try a scripted health-check with tcl script is an option but needs more investigation and is timeconsuming.
    I watched for other vendors solution, they use e.g. external imported shell scripts with curl (curl -s --ntlm -k -X POST ...) to do a health-check with ntlm. That would be fine at the moment to beat the requirement of extendet health-checks.
    But maybe it is only ntlm verion 1, I do not know what happens if it comes to ntlm version 2.
    Kerberos authentication is a much bigger problem, but at the moment not a requirement.
    Does anybody has some hints or also a tcl script for exchange health-checks ?
    Best Regards
    Alois

  • Exchange Server 2013 SP1 - Readiness Check Failing - Detected Non-existent Exchange 2007 Servers

    For development purposes, I needed to install Exchange Server 2013 in our environment.  Our current environment includes a couple Domain Controllers, a Sharepoint Server, and a SQL Server.  So, it's got a very simple topology.  The one thing
    our environment does NOT have are current Exchange servers.
    During the "Prerequisite Analysis" phase of the install it complained that two servers, that I can find nowhere in our active directory domain, are running Exchange 2007.  Obviously, this presents some unique problems.  Perhaps as a test
    many years ago, someone installed Exchange 2007 to "play" with, but we've never run Exchange for any length of time.  
    So, this is quite the conundrum, given the above does anyone have any suggestions as to a potential solution?  Ideally, I'd like to be able to "lift the covers" and cleanup the references to the non-existent servers somehow, but ANY suggestions
    for fixes are MUCH appreciated.
    Cheers,
    Nate

    Here is the thing I would do (Only if I am not going to have any exchange 2007 ever in the environment).
    On any of windows server 2008 download
    Exchange 2010 SP3
    Extract the file and run the below command:
    Setup.com /ps
    This will make Exchange 2013 install. Also Deleting Exchange Administrator Group wouldn't help as Setup will look for the information about schema into AD.
    Cheers,
    Gulab Prasad
    Technology Consultant
    Blog:
    http://www.exchangeranger.com    Twitter:
      LinkedIn:
       Check out CodeTwo’s tools for Exchange admins
    Note: Posts are provided “AS IS” without warranty of any kind, either expressed or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.

  • Health check script suggestions...

    I used the health check script from metalink and it gave me few suggestion regarding my replication environment. One of them is ...
    + SUGGESTION: One or more propagation processes contain rule sets.
    + If a Propagation process will unconditionally forward all incoming
    + messages to its destination queue, and no rule-based transformations are
    + performed by the Propagation process, you should consider removing
    + the rule set for the Propagation process via dbms_propagation_adm.alter_propagation.
    + This will improve Propagation performance.
    What is get from this is since i have same rule defined in propagation also as the one in capture, So suggestion from orcale is remove the propagation rule and let everything propagted through...anyhow since i want everything a capture process captures to be replicated on destenation.. so i removed the propagation rule. ..
    But now the replication has stoped performing after that.....
    can any one suggest me if my undersanding for above healthcheck suggestion is wrong then wht does it mean?
    Kapil

    Did you remove both the rule AND the rule set, or did you remove only the rule?
    If it was a positive rule set and you removed only the rule, you left an empty rule set as a positive rule set for the propagation. This will cause it to discard all messages.
    An empty positive rule set is not the same as no (null) positive rule set. A null rule set means "forward all messages, since there is not filter rule", but an empty rule set means "there is a rule: that no message will be forwarded".
    Ilidio.

  • Script for exporting the Delegated List from Exchange 2007

    We are Planing to Migrate the Exchange 2007 Mailbox to O365 by Hybrid deployment.
    So i would like to generate the List of delegated access rights on Mailboxes, could you help the script for genetating the delegated list.

    Hello,
    Look into get-Help Get-MailboxPermission
    Karl
    When you see answers and helpful posts, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer.
    My Blog: Unlock PowerShell
    My Book:
    Windows PowerShell 2.0 Bible
    My E-mail: -join ('6F6C646B61726C406F75746C6F6F6B2E636F6D'-split'(?<=\G.{2})'|%{if($_){[char][int]"0x$_"}})

Maybe you are looking for

  • Can I run microsoft sql server on my archlinux box?

    One of our office programs is showing its age, and I am looking at upgrading.  Unfortunately, they have changed their approach and it now requires a microsoft sql server.  Is there a way to run that on my arch server, through vmware or something like

  • Javax.servlet.UnavailableException: Cannot load a validator resource from '

    sorry to interrupt. i m using Struts1.1/jsp. When i comment out the codes for validation plugin the projects works fine but when its on its gives the following Exceptions Sep 18, 2008 4:17:07 PM org.apache.catalina.core.AprLifecycleListener lifecycle

  • After installing ios8 to my iphone 5 my phone won't come on?

    hi I installed the ios8 update on my iphone 5 and since doing so it will not come on.

  • Exception handling prob

    I want to write an exception handler for forms error message ora-01403. The problem code is PRAGMA Exception_Init (login_name_doesnt_exist, -01403); It gives me an 'illegal oracle error number' when I compile. I've checked the specs and -01403 IS val

  • I can't find my programs!

    I have downloaded, installed, and registered my product. When I first got the programs I used Bridge and Photoshop a bit, and it worked fine. But now, I've gone to use them again, and I can't find the programs! Under "Adobe" on my start menu is just