Microsoft Exchange 2013 PowerShell Useful Scripts

Microsoft Exchange

There’s some basic tasks which are good to automate, to save you some time, you can configure them to run as a scheduled task.

First step is to create a user account to run the scripts, this account should have access to change Exchange and change Active Directory, lets call the account: exchangeserviceuser.

To run a PowerShell script from a scheduled task you should create a scheduled task with the following settings:

General
Name:< different on each script   >
Location:
Use the following user account:DOMAIN\exchangeserviceuser  Run whether user is logged on or not. (Ticked)Run within highest privileges. (Ticked) 
Configure for:Windows 7, Windows Server 2008 R2
Actions
Action:Start a program
Program Script:c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Add Arguments (optional):-command “. ‘c:\Program Files\Microsoft\Exchange Server\v15\Bin\RemoteExchange.ps1’; Connect-ExchangeServer -auto; c:\scripts <different on each script> .ps1”
Start in (optional):< blank >

The PowerShell scripts are shown below for each task:

AddressBookPolicy.ps1

### AddressBookPolicy.ps1

### This script sets the address book policy for all users.

# Uncomment this line for testing within the Windows PowerShell ISE.

#add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

$allmailbox = get-mailbox -ResultSize Unlimited -OrganizationalUnit "OU=Users,DC=domain,DC=co,DC=uk"

Write-Host "Applying Address Book Policies to"$allmailbox.count"Staff accounts......"

$i = 0

Foreach ($item in $allmailbox) {

    $i = $i + 1

    Set-Mailbox -Identity ($item.alias) -AddressBookPolicy "Address Book Policy"

}

Write-Host "Processing Complete!"

Write-Host ""

Write-Host $i "Accounts Processed"

MailboxPerm.ps1

### MailboxPerm.ps1

### This script sets the calendar sharing permissions for all users.

# Uncomment this line for testing within the Windows PowerShell ISE.

#add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

$allmailbox=get-mailbox -ResultSize Unlimited -OrganizationalUnit "OU=Users,DC=domain,DC=co,DC=uk"

Foreach ($item in $allmailbox) {

    Set-mailboxfolderpermission –identity ($item.alias+’:\calendar’) –user Default –Accessrights Reviewer

   

}

Set-mailboxfolderpermission -identity ("mtgfm1:\calendar") -user Default -Accessrights AvailabilityOnly

Set-mailboxfolderpermission -identity ("mtgfm2:\calendar") -user Default -Accessrights AvailabilityOnly

Set-mailboxfolderpermission -identity ("mtgfm3:\calendar") -user Default -Accessrights AvailabilityOnly

Set-mailboxfolderpermission -identity ("mtgfm4:\calendar") -user Default -Accessrights AvailabilityOnly

MailboxRetention.ps1

### MailboxRetention.ps1

### This script sets the Archive and retention policy for all mailboxes.

# Uncomment this line for testing within the Windows PowerShell ISE.

#add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

Get-Mailbox -Resultsize Unlimited | Set-Mailbox -RetentionPolicy "Archive and Retention Policy"

Get-Mailbox -Resultsize Unlimited | Set-Mailbox -ArchiveQuota 25GB -ArchiveWarningQuota 20GB

OWAMailboxPolicy.ps1

Get-OWAMailboxPolicy | Set-OWAMailboxPolicy –AllowOfflineOn NoComputers

Get-OWAMailboxPolicy | Set-OWAMailboxPolicy -setphotoenabled:$false

Get-CASMailbox -ResultSize Unlimited | Set-CASMailbox -OWAMailboxPolicy Default

StaffAutomaticCreateMailbox.ps1

### StaffAutomaticCreateMailbox.ps1

### This script enables the mailbox on all users yet to have a mailbox enabled.

# Uncomment this line for testing within the Windows PowerShell ISE.

#add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

# Get a list of all the users within the OU within Active Directory.

$allusers = Get-AdUser -Filter * -SearchBase "OU=Users,DC=domain,DC=co,DC=uk" |  select samaccountname

Write-Host ""

Write-Host "Starting to process" $allusers.count "user accounts:"

Write-Host ""

$i = 0

Foreach ($item in $allusers) {

    if (!(Get-Mailbox $item.samAccountName -ErrorAction SilentlyContinue)) {

        Write-Host $item.samAccountName "- No Mailbox Exists, Creating....."

       

        Enable-Mailbox -Identity $item.samAccountName

        $i = $i + 1

    } else {

        Write-Host $item.samAccountName "- Mailbox Exists"

    } 

}

Write-Host ""

Write-Host "Account processing complete!"

Write-Host $allusers.count "user accounts processed," $i "mailboxes created."

Leave a Reply

Your email address will not be published. Required fields are marked *