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."