PowerShell for Exchange
Administrators
Dejan Foro CEO,
Exchangemaster GmbH
European Office 365 Connect Conference,
Haarlem, Netherlands 2.4.2014
Speaker introduction
• 21 years in IT of which last 16 as an Exchange specialist
• 6 Exchange generations (5.5, 2000, 2003, 2007, 2010, 2013)
• 3,2 million mailboxes
• Exchange User Group Europe - Founder
• 9x Microsoft MVP for Exchange
• Founder and CEO, Exchangemaster GmbH, Zurich, Switzerland
Agenda
• Introduction
• Setting you up for working with PowerShell
• PowerShell basics
• Using PowerShell examples in daily Exchange administration
Presentation download
• This presentation will be available for download from
www.exchangemaster.net
Setting you up for work with PowerShell
Tools, etc.
Get the properTools
http://www.idera.com/productssolutions/freetools/powershellplus
PowerShell Plus
• Advantages over built in PowerShell editor
• Advanced Editor
• Code you use everday at hand
• Script sharing with your colleauges
• Profiles
• Modules loading
• Different layouts
• Code signing
If you use other scripting languages in addition
to Powershell -
PowerGUI
PowerGUI
PowerGUI
PowerGUI
Introduction to PowerShell
ABC of ExchangeAdministration with PowerShell
Introduction
• How it used to be ....
• Problems of Scripting inWindows enviroment
• Many things could be done through command line
• VBScript – programming knowledge required, knowledge ofVB, WMI,WBEM,ADSI, object
models
• security voulnearable
Introduction
• How it is today ...
• Scripting with PowerShell in Exchange
• Command line interface developed first, than GUI
• EVERYTHING can be done via command line
• Exchange managment GUI actually executes PowerShell commands and shows you the
syntax
• Single line commands replace pages ofVB code
• Symple syntax
• Better security – exectution of powershell scripts completely disabled by default, require
scripts to be signed, etc.
Introduction
• Exchange Powershell – 500+ commands
Get-Excommand
• Don’t worry, you will be cool with approx. 20 
Why are you going to love PowerShell
•Task example :
• Get a list of mailboxes and export into .csv file
Why you are going to love PowerShell
• VBScript 
Dim SWBemlocator
Dim objWMIService
Dim colItems
Dim objFSO
Dim objFile
strTitle="Mailbox Report"
strComputer = “MyServer"
UserName = ""
Password = ""
strLog="Report.csv"
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.CreateTextFile(strLog,True)
strQuery="Select * from Exchange_Mailbox"
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"rootMicrosoftExchangeV2",UserName,Password)
Set colItems = objWMIService.ExecQuery(strQuery,,48)
For Each objItem In colItems
objFile.writeline objItem.ServerName & "," &objItem.StorageGroupName &_
"," & objItem.StoreName & "," & Chr(34) & objItem.MailboxDisplayName
Next
objFile.close
Why you are going to love PowerShell
•PowerShell 
Get-mailbox | export-csv c:report.csv
.... And Action !!!
Command Syntax
• New-Mailbox
• Get-Mailbox
• Set-Mailbox
• Move-Mailbox
• Remove-Mailbox ...
Getting help
• List of all available PowerShell commands
Get-Command
• List of only Exchange commands
Get-Excommand
• Getting help about specific command
Get-Help Get-Mailbox
Get-Help Get-Mailbox – detailed
Get-Help Get-Mailbox – full
Getting info about users/mailboxes
• List of all mailboxes in organisation
Get-Mailbox
Get-Mailbox -ResultSize unlimited
Getting all available properties
Get-Mailbox | Format-List
Get-Mailbox –ResultSize 1 | Format-List
Getting just a list of properties names
Get-Mailbox | Get-Member -MemberType *Property |
Select-Object Name
Selecting & Sorting
Get-Mailbox | Select-Object -Property DisplayName, PrimarySMTPAddress
Get-Mailbox | Select-Object -Property DisplayName,
PrimarySMTPAddress | Sort-Object -Property DisplayName
Examples
• List all mailboxes, sort by name, and export
into a CSV file
Get-Mailbox | Sort-Object -Property Name |
Export-csv c:mailboxes.csv
• Get a list of mailboxes from Active Directory
OU named Users
Get-Mailbox -OrganizationalUnit Users
Examples
• Count mailboxes in organisation
(Get-mailbox).count
• Getting all properties for a specific user
Get-Mailbox | where {$_.DisplayName -eq "Dejan Foro"} |
format-list
• Who is the postmaster ?
Get-Mailbox | where {$_.EmailAddresses -contains
"postmaster@exchangemaster.net"}
Examples
• Who is the user with GUID e65a6ff3-d193-4563-9a8e-26a22315a686 ?
Get-Mailbox | where {$_.guid -eq "e65a6ff3-d193-
4563-9a8e-26a22315a686"}
• Who has UM extention 200 ?
Get-Mailbox | where {$_.extensions -contains "200"}
Getting info about servers
• Give me a list of Exchange servers
Get-Exchangeserver
Get-ExchangeServer | Select-Object -Property Name, Edition,
AdminDisplayVersion, ServerRole | format-list
Examples
• Give me a list of mailbox servers
Get-ExchangeServer | where {$_.ServerRole -ilike "*Mailbox*"}
• Do we have servers running on trial version of Exchange and if yes when do
they expire ?
Get-ExchangeServer | where {$_.IsExchange2007TrialEdition -eq "True"} | Select-
Object -Property FQDN, RemainingTrialPeriod
Getting membership of a group
Get-DistributionGroupMember -identity "Swiss IT Pro User Group Moderators"
Managing the user lifecycle
• Creating users - Importing from a .csv file
• Modifing users – move to another database
• Removing mailboxes and users
Importing users from a .CSV file
• Task
• Import users from a file c:users.csv
• For every user
• Create user account in AD of form First.Last@exchangemaster.net
• Put them in Organizational UnitVIP
• Create a mailbox in database “Standard users”
• Enter his first and last name
• Set all users with password Password123 and require the users to change the password at
first logon
Importing users from a .CSV file
Import-CSV c:users.csv
Procesing values from a csv file
• Processing each row of data from .CSV file
Import-CSV c:users.csv | ForEach-Object { SOME ACTION}
• Command for creating Users
New-Mailbox
Get-Help New-Mailbox –full
Processing values from .CSV file
• Referencing column names from the .CSV file
$_.columnname
• Converting Password text into secure string
$Password = ConvertTo-SecureString -String "Password123" -
asplaintext -force
Importing users from a .CSV file
• Putted all together
$Password = ConvertTo-SecureString -String "Password123" -asplaintext -force
Import-Csv c:users.csv | ForEach-Object {
$Name = $_.First + " " + $_.Last
$UPN = $_.First + "." + $_.Last + "@exchangemaster.net"
New-Mailbox -Name $Name -UserPrincipalName $UPN -Password $Password -
OrganizationalUnit VIP -Database 'standard users' -FirstName $_.First -LastName
$_Last -ResetPasswordOnNextLogon $True}
Making changes to users
• Apply policies
• Assing to groups
• Enable or disable features
• Changing attributes
• Moving mailboxes ....
Moving mailboxes
• Moving mailoboxes of users in OUVIP to a new database forVIPs
Get-Mailbox -OrganizationalUnit "VIP" | Move-Mailbox -
TargetDatabase "VIP users"
Moving mailboxes
• Checking for mailbox location after move
Get-Mailbox | Select-Object Name,Database
Removing mailboxes
• Check before deleting !
Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox -WhatIf
• Remove them
Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox
Recommendation
• 3rd party snap-in for better manipulation ofADobjects
• Quest Software
• ActiveRoles Management Shell for Active Directoy
Managing queues
• Removing spam messages from the queue
Remove-Message -Filter {FromAddress -like "*spammer.com*“ } -
withNDR $false
Testing
• Get a list of test commands
• Get-Command test*
Testing
Communicating with user from the script
• Prompting user
Write-Host -ForegroundColor red -BackgroundColor yellow
"Formating your drive c: ..."
Write-Host -ForegroundColor blue -BackgroundColor green "Be
cool I am just kidding"
• Getting user input
Read-Host
Script samples
Using PowerShell in your daily Exchange admin routine
Install Exchange 2013 pre-requisites
http://technet.microsoft.com/en-us/library/bb691354(v=exchg.150).aspx#WS2008R2SP1MBX
Import-Module ServerManager
Add-WindowsFeature Desktop-Experience, NET-Framework, NET-HTTP-Activation,
RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Web-Server, WAS-Process-Model,
Web-Asp-Net, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing,
Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect,
Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console,
Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext, Web-Request-Monitor,
Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI
Good Morning Exchange
FAQ 000116 - Good Morning Exchange - doing a quick check on Exchange using
PowerShellhttp://www.exchangemaster.net/index.php?option=com_content&task=view&id=247
&Itemid=1&lang=en
It checks the following 3 things on all your Exchange machines:
- Are Exchange services running?
- Are all databases mounted and healty?
- Are E-mails piling up in the queues?
Good Morning Exchnage
Checking services...
All Exchange services OK
Checking databases..
All Databases OK
Checking Queues...
All Queues OK
All systems OK, you can have your morning coffee :)
|---|
| |)
|___|
Checking services...
All Exchange services OK
Checking databases..
All Databases OK
Checking Queues...
SERVER01
SERVER011448 500
SERVER011478 300
SERVER011485 50
Sorry mate, no coffee for you. There is work to do.
|---|
| |)
|___|
Good Morning Exchnage
Did the backup run last night?
• Exchange 2010 backup report
http://www.exchangemaster.net/index.php?option=com_content&task=vie
w&id=251&Itemid=57&lang=en
• Exchange 2007 backup report
http://www.exchangemaster.net/index.php?option=com_content&task=view&id=251&Ite
mid=57&lang=en
Did the backup run last night ?
Backup Status Report for All Databases in Exchange Organization MAIL
Created on 23.09.2013 15:40:57
Backup Status of Mailbox Databases
Server Name BackupInProgress LastFullBackup LastIncrementalBackup LastDifferentialBackup LastCopyBackup RetainDeletedItemsUntilBackup
-------- ---- ---------------- -------------- --------------------- ---------------------- -------------- -----------------------------
SERVER01 DB01 False 20.09.2013 17:01:35 False
SERVER01 DB02 False 20.09.2013 17:01:35 23.07.2013 18:37:31 False
SERVER02 DB03 False 20.09.2013 17:01:35 23.07.2013 20:19:37 False
SERVER02 DB04 False 20.09.2013 17:01:35 23.07.2013 21:49:31 False
SERVER03 DB05 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False
SERVER03 DB06 False 22.09.2013 17:20:03 23.09.2013 12:05:12 False
SERVER03 DB09 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False
SERVER04 DB07 False 22.09.2013 17:20:03 23.09.2013 12:05:12 False
SERVER04 DB08 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False
Backup Status of Public Folder Databases
Server Name BackupInProgess LastFullBackup LastIncrementalBackup LastDifferentialBackup LastCopyBackup RetainDeletedItemsUntilBackup
-------- ---- --------------- -------------- --------------------- ---------------------- -------------- -----------------------------
SERVER01 Public Folder DB06 22.09.2013 17:20:03 False
SERVER03 Public Folder DB08 20.09.2013 17:01:35 False
DAG Maintenance
• Scripts that come with Exchange server
C:Program FilesMicrosoftExchangeServerV14scripts
StartDagServerMaintenance.ps1
StopDagServerMaintenance.ps1
RedistributeActiveDatabases.ps1
DAG Maintenance
Exchange01 Exchange02
DAG01
DB01
DB02
DB03
DB04
DB01
DB02
DB03
DB04
DAG Maintenance
On the first node
1) execute
.StartDagServerMaintenance.ps1 -ServerName Exchange01
2) Do your maintenance (patching, whatever) on the first node
Exchange01 Exchange02
DAG01
DB01
DB02
DB03
DB04
DB01
DB02
DB03
DB04
DAG Maintenance
3) After maintenance is completed
.StopDagServerMaintenance.ps1 -ServerName Exchange01
Exchange01 Exchange02
DAG01
DB01
DB02
DB03
DB04
DB01
DB02
DB03
DB04
DAG Maintenance
4) On the second node
.StartDagServerMaintenance.ps1 -ServerName Exchange02
5)Do the patching
Exchange01 Exchange02
DAG01
DB01
DB02
DB03
DB04
DB01
DB02
DB03
DB04
DAG Maintenance
6) On the second node
.StopDagServerMaintenance.ps1 -ServerName Exchange02
DAG Maintenance
7) execute
.RedistributeActiveDatabases.ps1 -DagName DAG01 -BalanceDbsByActivationPreference
-ShowFinalDatabaseDistribution -Confirm:$false
Compare Services
• Computer1: SERVER01
• Computer2: SERVER02
• SystemName DisplayName StartMode State Status
• ---------- ----------- --------- ----- ------
• SERVER01 Application Management Manual Running OK
• SERVER02 Application Management Manual Stopped OK
• SERVER01 PsKill Manual Stopped OK
• SERVER01 WinHTTP Web Proxy Auto-Discovery Service Manual Running OK
• SERVER02 WinHTTP Web Proxy Auto-Discovery Service Manual Stopped OK
PowerShell books – Lite
• Frank Koch, Microsoft Switzerland
• German version
• English version
PowerShell books – medium
• PowerShell documentation Pack
• Manuals that comes with Powershell
http://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56-
ec48bfca154f&DisplayLang=en
PowerShell books – medium
• PowerShell documentation Pack
• Manuals that comes with Powershell
http://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56-
ec48bfca154f&DisplayLang=en
Powershell Books – Advanced
Q&A
• Q&A session 17:30 – 18:30
• You can send your questions in advance to
• dejan.foro@exchangemaster.net
Contact
Dejan Foro, CEO
dejan.foro@exchangemaster.net
Exchangemaster GmbH
www.exchangemaster.net
Show your scripts to the world
• Technet Gallery
• Powershell.com
O365con14 - powershell for exchange administrators

O365con14 - powershell for exchange administrators

  • 2.
    PowerShell for Exchange Administrators DejanForo CEO, Exchangemaster GmbH European Office 365 Connect Conference, Haarlem, Netherlands 2.4.2014
  • 3.
    Speaker introduction • 21years in IT of which last 16 as an Exchange specialist • 6 Exchange generations (5.5, 2000, 2003, 2007, 2010, 2013) • 3,2 million mailboxes • Exchange User Group Europe - Founder • 9x Microsoft MVP for Exchange • Founder and CEO, Exchangemaster GmbH, Zurich, Switzerland
  • 4.
    Agenda • Introduction • Settingyou up for working with PowerShell • PowerShell basics • Using PowerShell examples in daily Exchange administration
  • 5.
    Presentation download • Thispresentation will be available for download from www.exchangemaster.net
  • 6.
    Setting you upfor work with PowerShell Tools, etc.
  • 7.
  • 8.
    PowerShell Plus • Advantagesover built in PowerShell editor • Advanced Editor • Code you use everday at hand • Script sharing with your colleauges • Profiles • Modules loading • Different layouts • Code signing
  • 19.
    If you useother scripting languages in addition to Powershell -
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    Introduction to PowerShell ABCof ExchangeAdministration with PowerShell
  • 25.
    Introduction • How itused to be .... • Problems of Scripting inWindows enviroment • Many things could be done through command line • VBScript – programming knowledge required, knowledge ofVB, WMI,WBEM,ADSI, object models • security voulnearable
  • 26.
    Introduction • How itis today ... • Scripting with PowerShell in Exchange • Command line interface developed first, than GUI • EVERYTHING can be done via command line • Exchange managment GUI actually executes PowerShell commands and shows you the syntax • Single line commands replace pages ofVB code • Symple syntax • Better security – exectution of powershell scripts completely disabled by default, require scripts to be signed, etc.
  • 28.
    Introduction • Exchange Powershell– 500+ commands Get-Excommand • Don’t worry, you will be cool with approx. 20 
  • 29.
    Why are yougoing to love PowerShell •Task example : • Get a list of mailboxes and export into .csv file
  • 30.
    Why you aregoing to love PowerShell • VBScript  Dim SWBemlocator Dim objWMIService Dim colItems Dim objFSO Dim objFile strTitle="Mailbox Report" strComputer = “MyServer" UserName = "" Password = "" strLog="Report.csv" Set objFSO=CreateObject("Scripting.FileSystemObject") Set objFile=objFSO.CreateTextFile(strLog,True) strQuery="Select * from Exchange_Mailbox" Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = SWBemlocator.ConnectServer(strComputer,"rootMicrosoftExchangeV2",UserName,Password) Set colItems = objWMIService.ExecQuery(strQuery,,48) For Each objItem In colItems objFile.writeline objItem.ServerName & "," &objItem.StorageGroupName &_ "," & objItem.StoreName & "," & Chr(34) & objItem.MailboxDisplayName Next objFile.close
  • 31.
    Why you aregoing to love PowerShell •PowerShell  Get-mailbox | export-csv c:report.csv
  • 32.
  • 33.
    Command Syntax • New-Mailbox •Get-Mailbox • Set-Mailbox • Move-Mailbox • Remove-Mailbox ...
  • 34.
    Getting help • Listof all available PowerShell commands Get-Command • List of only Exchange commands Get-Excommand • Getting help about specific command Get-Help Get-Mailbox Get-Help Get-Mailbox – detailed Get-Help Get-Mailbox – full
  • 35.
    Getting info aboutusers/mailboxes • List of all mailboxes in organisation Get-Mailbox Get-Mailbox -ResultSize unlimited
  • 36.
    Getting all availableproperties Get-Mailbox | Format-List Get-Mailbox –ResultSize 1 | Format-List
  • 37.
    Getting just alist of properties names Get-Mailbox | Get-Member -MemberType *Property | Select-Object Name
  • 38.
    Selecting & Sorting Get-Mailbox| Select-Object -Property DisplayName, PrimarySMTPAddress Get-Mailbox | Select-Object -Property DisplayName, PrimarySMTPAddress | Sort-Object -Property DisplayName
  • 39.
    Examples • List allmailboxes, sort by name, and export into a CSV file Get-Mailbox | Sort-Object -Property Name | Export-csv c:mailboxes.csv • Get a list of mailboxes from Active Directory OU named Users Get-Mailbox -OrganizationalUnit Users
  • 40.
    Examples • Count mailboxesin organisation (Get-mailbox).count • Getting all properties for a specific user Get-Mailbox | where {$_.DisplayName -eq "Dejan Foro"} | format-list • Who is the postmaster ? Get-Mailbox | where {$_.EmailAddresses -contains "postmaster@exchangemaster.net"}
  • 41.
    Examples • Who isthe user with GUID e65a6ff3-d193-4563-9a8e-26a22315a686 ? Get-Mailbox | where {$_.guid -eq "e65a6ff3-d193- 4563-9a8e-26a22315a686"} • Who has UM extention 200 ? Get-Mailbox | where {$_.extensions -contains "200"}
  • 42.
    Getting info aboutservers • Give me a list of Exchange servers Get-Exchangeserver Get-ExchangeServer | Select-Object -Property Name, Edition, AdminDisplayVersion, ServerRole | format-list
  • 43.
    Examples • Give mea list of mailbox servers Get-ExchangeServer | where {$_.ServerRole -ilike "*Mailbox*"} • Do we have servers running on trial version of Exchange and if yes when do they expire ? Get-ExchangeServer | where {$_.IsExchange2007TrialEdition -eq "True"} | Select- Object -Property FQDN, RemainingTrialPeriod
  • 44.
    Getting membership ofa group Get-DistributionGroupMember -identity "Swiss IT Pro User Group Moderators"
  • 45.
    Managing the userlifecycle • Creating users - Importing from a .csv file • Modifing users – move to another database • Removing mailboxes and users
  • 46.
    Importing users froma .CSV file • Task • Import users from a file c:users.csv • For every user • Create user account in AD of form First.Last@exchangemaster.net • Put them in Organizational UnitVIP • Create a mailbox in database “Standard users” • Enter his first and last name • Set all users with password Password123 and require the users to change the password at first logon
  • 47.
    Importing users froma .CSV file Import-CSV c:users.csv
  • 48.
    Procesing values froma csv file • Processing each row of data from .CSV file Import-CSV c:users.csv | ForEach-Object { SOME ACTION} • Command for creating Users New-Mailbox Get-Help New-Mailbox –full
  • 49.
    Processing values from.CSV file • Referencing column names from the .CSV file $_.columnname • Converting Password text into secure string $Password = ConvertTo-SecureString -String "Password123" - asplaintext -force
  • 50.
    Importing users froma .CSV file • Putted all together $Password = ConvertTo-SecureString -String "Password123" -asplaintext -force Import-Csv c:users.csv | ForEach-Object { $Name = $_.First + " " + $_.Last $UPN = $_.First + "." + $_.Last + "@exchangemaster.net" New-Mailbox -Name $Name -UserPrincipalName $UPN -Password $Password - OrganizationalUnit VIP -Database 'standard users' -FirstName $_.First -LastName $_Last -ResetPasswordOnNextLogon $True}
  • 51.
    Making changes tousers • Apply policies • Assing to groups • Enable or disable features • Changing attributes • Moving mailboxes ....
  • 52.
    Moving mailboxes • Movingmailoboxes of users in OUVIP to a new database forVIPs Get-Mailbox -OrganizationalUnit "VIP" | Move-Mailbox - TargetDatabase "VIP users"
  • 53.
    Moving mailboxes • Checkingfor mailbox location after move Get-Mailbox | Select-Object Name,Database
  • 54.
    Removing mailboxes • Checkbefore deleting ! Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox -WhatIf • Remove them Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox
  • 55.
    Recommendation • 3rd partysnap-in for better manipulation ofADobjects • Quest Software • ActiveRoles Management Shell for Active Directoy
  • 56.
    Managing queues • Removingspam messages from the queue Remove-Message -Filter {FromAddress -like "*spammer.com*“ } - withNDR $false
  • 57.
    Testing • Get alist of test commands • Get-Command test*
  • 58.
  • 59.
    Communicating with userfrom the script • Prompting user Write-Host -ForegroundColor red -BackgroundColor yellow "Formating your drive c: ..." Write-Host -ForegroundColor blue -BackgroundColor green "Be cool I am just kidding" • Getting user input Read-Host
  • 60.
    Script samples Using PowerShellin your daily Exchange admin routine
  • 61.
    Install Exchange 2013pre-requisites http://technet.microsoft.com/en-us/library/bb691354(v=exchg.150).aspx#WS2008R2SP1MBX Import-Module ServerManager Add-WindowsFeature Desktop-Experience, NET-Framework, NET-HTTP-Activation, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Web-Server, WAS-Process-Model, Web-Asp-Net, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI
  • 62.
    Good Morning Exchange FAQ000116 - Good Morning Exchange - doing a quick check on Exchange using PowerShellhttp://www.exchangemaster.net/index.php?option=com_content&task=view&id=247 &Itemid=1&lang=en It checks the following 3 things on all your Exchange machines: - Are Exchange services running? - Are all databases mounted and healty? - Are E-mails piling up in the queues?
  • 63.
    Good Morning Exchnage Checkingservices... All Exchange services OK Checking databases.. All Databases OK Checking Queues... All Queues OK All systems OK, you can have your morning coffee :) |---| | |) |___|
  • 64.
    Checking services... All Exchangeservices OK Checking databases.. All Databases OK Checking Queues... SERVER01 SERVER011448 500 SERVER011478 300 SERVER011485 50 Sorry mate, no coffee for you. There is work to do. |---| | |) |___| Good Morning Exchnage
  • 65.
    Did the backuprun last night? • Exchange 2010 backup report http://www.exchangemaster.net/index.php?option=com_content&task=vie w&id=251&Itemid=57&lang=en • Exchange 2007 backup report http://www.exchangemaster.net/index.php?option=com_content&task=view&id=251&Ite mid=57&lang=en
  • 66.
    Did the backuprun last night ? Backup Status Report for All Databases in Exchange Organization MAIL Created on 23.09.2013 15:40:57 Backup Status of Mailbox Databases Server Name BackupInProgress LastFullBackup LastIncrementalBackup LastDifferentialBackup LastCopyBackup RetainDeletedItemsUntilBackup -------- ---- ---------------- -------------- --------------------- ---------------------- -------------- ----------------------------- SERVER01 DB01 False 20.09.2013 17:01:35 False SERVER01 DB02 False 20.09.2013 17:01:35 23.07.2013 18:37:31 False SERVER02 DB03 False 20.09.2013 17:01:35 23.07.2013 20:19:37 False SERVER02 DB04 False 20.09.2013 17:01:35 23.07.2013 21:49:31 False SERVER03 DB05 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False SERVER03 DB06 False 22.09.2013 17:20:03 23.09.2013 12:05:12 False SERVER03 DB09 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False SERVER04 DB07 False 22.09.2013 17:20:03 23.09.2013 12:05:12 False SERVER04 DB08 False 22.09.2013 17:20:02 23.09.2013 12:05:12 False Backup Status of Public Folder Databases Server Name BackupInProgess LastFullBackup LastIncrementalBackup LastDifferentialBackup LastCopyBackup RetainDeletedItemsUntilBackup -------- ---- --------------- -------------- --------------------- ---------------------- -------------- ----------------------------- SERVER01 Public Folder DB06 22.09.2013 17:20:03 False SERVER03 Public Folder DB08 20.09.2013 17:01:35 False
  • 67.
    DAG Maintenance • Scriptsthat come with Exchange server C:Program FilesMicrosoftExchangeServerV14scripts StartDagServerMaintenance.ps1 StopDagServerMaintenance.ps1 RedistributeActiveDatabases.ps1
  • 68.
  • 69.
    DAG Maintenance On thefirst node 1) execute .StartDagServerMaintenance.ps1 -ServerName Exchange01 2) Do your maintenance (patching, whatever) on the first node Exchange01 Exchange02 DAG01 DB01 DB02 DB03 DB04 DB01 DB02 DB03 DB04
  • 70.
    DAG Maintenance 3) Aftermaintenance is completed .StopDagServerMaintenance.ps1 -ServerName Exchange01 Exchange01 Exchange02 DAG01 DB01 DB02 DB03 DB04 DB01 DB02 DB03 DB04
  • 71.
    DAG Maintenance 4) Onthe second node .StartDagServerMaintenance.ps1 -ServerName Exchange02 5)Do the patching Exchange01 Exchange02 DAG01 DB01 DB02 DB03 DB04 DB01 DB02 DB03 DB04
  • 72.
    DAG Maintenance 6) Onthe second node .StopDagServerMaintenance.ps1 -ServerName Exchange02
  • 73.
    DAG Maintenance 7) execute .RedistributeActiveDatabases.ps1-DagName DAG01 -BalanceDbsByActivationPreference -ShowFinalDatabaseDistribution -Confirm:$false
  • 74.
    Compare Services • Computer1:SERVER01 • Computer2: SERVER02 • SystemName DisplayName StartMode State Status • ---------- ----------- --------- ----- ------ • SERVER01 Application Management Manual Running OK • SERVER02 Application Management Manual Stopped OK • SERVER01 PsKill Manual Stopped OK • SERVER01 WinHTTP Web Proxy Auto-Discovery Service Manual Running OK • SERVER02 WinHTTP Web Proxy Auto-Discovery Service Manual Stopped OK
  • 75.
    PowerShell books –Lite • Frank Koch, Microsoft Switzerland • German version • English version
  • 76.
    PowerShell books –medium • PowerShell documentation Pack • Manuals that comes with Powershell http://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56- ec48bfca154f&DisplayLang=en
  • 77.
    PowerShell books –medium • PowerShell documentation Pack • Manuals that comes with Powershell http://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56- ec48bfca154f&DisplayLang=en
  • 78.
  • 79.
    Q&A • Q&A session17:30 – 18:30 • You can send your questions in advance to • dejan.foro@exchangemaster.net
  • 80.
  • 81.
    Show your scriptsto the world • Technet Gallery • Powershell.com