Just can't get enough of IT

This blog is about mostly anything in IT. But the primary focuses are Microsoft Technologies like Exchange, Office 365, Azure and Cloud Security.


This script copies a single receive connector from a source Exchange Server to a single target Exchange server or to all other Exchange servers.

The primary purposes of this script are:

  • Simplify migration of legacy Exchange receive connectors (Exchange 2007 or Exchange2010) to a modern Exchange server (Exchange 2013 or Exchange 2016)
  • Simplify receive connector distribution across multiple Exchange servers (Exchange 2013 or Exchange 2016)


Copy Exchange 2013/2016 receive connector nikos-one-RC2 from server MBX01 to server MBX2

.\Copy-ReceiveConnector.ps1 -SourceServer MBX01 -ConnectorName nikos-one-RC2 `
-TargetServer MBX2 -DomainController

Copy Exchange 2013/2016 receive connector nikos-one-RC2 from server MBX01 to all other Exchange 2013 servers

.\Copy-ReceiveConnector.ps1 -SourceServer MBX01 -ConnectorName nikos-one-RC1 `
-CopyToAllOther -DomainController

Copy Exchange 2013/2016 receive connector nikos-two relay from Exchange 2007 server MBX2007 to Exchange 2013 server MBX01 and reset network bindings

.\Copy-ReceiveConnector.ps1 -SourceServer MBX2007 -ConnectorName "nikos-two relay" `
-TargetServer MBX01 -MoveToFrontend -ResetBindings `

Version History

  • 1.0, Initial community release
  • 1.1 Domain Controller parameter added, permissions group copy added
  • 1.2 Move to FrontendTransport added, optional permission copy added, reset bindings added
  • 1.3 Update receive connector, if receive connector exists
  • 1.4 Fix to handle connector updates properly
  • 1.41 Minor fixes and update for Exchange 2016


Script last updated: 2016-07-26

Additional Credits

Additional credits go to Jeffery Land,


Read More »

The PowerShell script to purge IIS and Exchange Server 2013 has been updated to support email reporting.

When executed by a scheduled task it is extremely helpful to Exchange Administrators to receive some sort of conformation of the script execution.

If using the SendMail switch, a summary report is sent as an Html email

Parameters added:

Switch to send an Html report

Email address of report sender

Email address of report recipient

.PARAMETER MailServer 
SMTP Server for email report



This post has first been posted on my legacy blog.

Read More »


This script adds a new scheduled task for an Exchange Server 2013 environment in a new task scheduler group "Exchange".

When providing a username and password the scheduled task will be configured to "Run whether user is logged on or not".

When username and password are provided the Register-ScheduledTask cmdlet verfies the logon credentials and will fails, if the credentials provided (username/password) are not valid.

Note: The cmdlet Register-ScheduledTask consumes the user password in clear text.


# Create a new scheduled task using a dedicated service account
.\New-ScheduledExchangeTask.ps1 -TaskName "My Task" -ScriptName TaskScript1.ps1 -ScriptPath D:\Automation -TaskUser DOMAIN\ServiceAccount -Password P@ssw0rd

# Create a simple scheduled task
.\New-ScheduledExchangeTask.ps1 -TaskName "My Task" -ScriptName TaskScript1.ps1 -ScriptPath D:\Automation 

Version History

  • 1.0, Initial community release


Additional Credits


Read More »
Last updated: 2016-11-28

Exchange Server 2013Description

This script removes/disables HealthMailboxes that show an inconsistent error when querying monitoring mailboxes using

Get-Mailbox -Monitoring

and receiving a warning like

"WARNING: The object DOMAINNAME/Microsoft Exchange System Objects/Monitoring Mailboxes/Health_Mailbox_GUID has been corrupted,


# Remove the HealthMailbox(es) having an empty database attribute

.\Fix-HealthMailboxes.ps1 -Remove   

Version History

  • 1.0, Initial community release
  • 1.1, Some PowerShell hygiene




Read More »
On February 26, 2015
0 Comment

When you maintain a number of servers which require to trigger the same scheduled task manually, you can simply the process by triggering the scheduled task remotely.

In this example I assume that the script is being executed on a dedicated management server (aka job server) within an Exchange Server 2013 environment. The scheduled task must exist on all servers having the same name.

Create a simple PowerShell script at a file location of your choice (i.e. D:\Scripts\Start-RemoteScheduledTasks.ps1)

$cimSession = New-CimSession -ComputerName SERVER1,SERVER2,SERVER3,SERVER4
Start-ScheduledTask TASKNAME -CimSession $cimSession
Remove-CimSession $cimSession

Now create a new shortcut on your server desktop with the following configuration:

Target: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& D:\Scripts\Start-RemoteScheduledTasks.ps1"

If required, select "Run as Adminstrator" in Shortcut -> Advanced settings.


This post has been published originally on my legacy blog SF-Tools.

Read More »