Skip to main content

How to Schedule an Exchange PowerShell Script in Task Scheduler

Exchange Management Shell
Since Exchange 2007, Microsoft has provided the Exchange Management Shell so administrators can manage all aspects of the Exchange server from the command line.



The Exchange Management Shell has Exchange specific PowerShell cmdlets. These Exchange cmdlets are not normally available in an ordinary PowerShell command environment.



An example of what can be done in the Exchange Management Shell is to run a PowerShell script to list all the mailboxes on the Exchange server to a file. You can output columns based on display name, size of the mailbox, last logon, and other available mailbox attributes.

You can also schedule a batch migration of mailboxes from one database to another such as the migration of mailboxes from Exchange 2010 to Exchange 2013.

Scheduling the PowerShell Script

Once you have written a PowerShell script and utilised the Exchange cmdlets, you can run it with no problems inside the Exchange Management Shell. If you were to try to run it under a normal PowerShell command line, it would not be able to know about the Exchange cmdlets. This means that if you were to schedule it in Task Scheduler the same way you would normally do with regular PowerShell scripts, it will not work either.

You have to add special parameters. These parameters are basically the same as what is being called when you launch the Exchange Management Shell. If we check the properties of the Exchange Management Shell shortcut, we can see the following.



The Target is :


C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto -ClientApplication:ManagementShell "

(Note: The above is ALL one line)

We are going to break it up into the components needed to schedule a task  in Task Scheduler like this:

Program/Script:  powershell
Add arguments (optional):  -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto ; c:\myscriptsfolder\myscript.ps1 "

Note: The above arguments are all on one line. The red writing above (c:\myscriptsfolder\myscript.ps1) should be the full path to the script that you want to run. Also, the above example is for Exchange 2016. You will need to check your Exchange Management Shell properties on your server to find the location of the RemoteExchange.ps1 file.

We need to remove -noexit from the arguments.

If left in there, the script will not exit after it finishes processing and the Task will be left "running". You will then need to end it manually before this same Task can run again.

When you create your task, in the New Action window, fill it out so it looks something like this.





Comments

Popular posts from this blog

Custom Metrics for Amazon CloudWatch

With Amazon CloudWatch, in addition to monitoring the built-in metrics that come with AWS, you can monitor with your custom metrics. This new custom metrics feature can be used in two different ways: 1. You can add to the metrics collected for Amazon EC2 Instances, EBS Volumes, Elastic Load Balancers, and Relational Database Service DB Instances. The metrics that you store can be technical (system performance indicators) or business-related (user activity over the monitoring period). 2. You can store metrics for any generic resource. You can use CloudWatch to create a single, integrated storage and aggregation point for all of the metrics that you want to watch and to monitor. In the exam (at least the test exam) you are asked to pick which ones are custom metrics. Therefore, go through the available AWS metrics so you will get an idea of which metric is likely to be a custom metric when you are asked the question. You can browse through the list of built-in metr

How To Migrate Mailboxes from Exchange 2010 to Exchange 2016 using PowerShell

The Scenario Your organisation have decided to migrate from Exchange 2010 to Exchange 2016. The Exchange 2016 server have been installed into your current Exchange Organization. The Mailbox role have been installed on the Exchange 2016 server and you are ready to start moving mailboxes from the Exchange 2010 server to the Exchange 2016 server. Migrating a Mailbox from Exchange 2010 to Exchange 2016 Using New-MoveRequest Migrating a single mailbox involves invoking the cmdlet New-MoveRequest from the Exchange Management Shell on the Exchange 2016 server . Make sure that your user account that you have logged into the server with have the Organization Management role. The common parameters that I use for the New-MoveRequest cmdlet is : New-MoveRequest -Identity 'useralias@somedomain.com' -TargetDatabase "DB02" -BadItemLimit 10 The -Identity parameter identifies the mailbox to be migrated. I usually use the e-mail address of the mailbox for the identity