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 '<', "<"
$HTMLTable = $HTMLTable -replace '>', ">"
$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 pleaseHi,
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 -
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
ETCHi 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
RoryHi,
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
AltonSo, 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. -
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
johnHi
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
AloisHi 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,
NateHere 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?
KapilDid 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.
-
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