Archive
[MS-200] Exchange System Requirements
Supported co-existence for Exchange 2019
- Exchange 2010, not supported
- Exchange 2013, supported with 2013 CU21 or later, including Edge Transport Servers
- Exchange 2016, Supported with 2016 CU11 or later, including Edge Transport Servers
- Mixed 2013 and 2016, Supported if 2013 and 2016 meeting previous requirements
Network and directory server requirements for Exchange 2019
- Domain Controller, Windows Server 2012 R2, 2016,2019
- AD Forest, Windows Server 2012 R2 or higher
- AD Site, Writable domain controller and global catalog server
- DNS Namespace, Contiguous, Non-contiguous, Single label domain, Disjoint.
- IPv6, Exchange 2013 or later supports IPv6 when installed and enabled; send and receive in IPv6 if supported
References:
https://docs.microsoft.com/en-us/exchange/plan-and-deploy/system-requirements?view=exchserver-2019
[MS-200] Overview
MS-200 Study Guide.
Manage Modern Messaging Infrastructure (45-50%)
- Manage databases
- May include but not limited to: Plan mailbox database requirements, create mailbox databases, configure mailbox databases, troubleshoot mailbox databases
- https://docs.microsoft.com/en-us/exchange/architecture/mailbox-servers/manage-databases?view=exchserver-2019
- Manage Database Availability Groups (DAGs)
- May include but not limited to: Plan DAG settings and members, create a DAG, manage DAG members, deploy and manage site resilience, test a database and datacenter failover scenario, troubleshoot DAG problems, evaluate Exchange services health
- https://docs.microsoft.com/en-us/exchange/high-availability/database-availability-groups/database-availability-groups?view=exchserver-2019
- https://docs.microsoft.com/en-us/exchange/high-availability/manage-ha/manage-dags?view=exchserver-2019
- Manage and implement client access
- May include but not limited to: Plan namespaces, plan high availability for client access, configure virtual directories and URLs, configure client access policies, configure global Outlook Web App (OWA) policies, configure Autodiscover for Exchange, troubleshoot client access connectivity problems, manage Exchange certificates lifecycle
- https://www.edx.org/course/microsoft-exchange-server-2016-client-access-services
- Manage disaster recovery
- May include but not limited to: Plan backup and recovery strategy, implement and perform backups, restore servers, databases, and mailboxes
- https://docs.microsoft.com/en-us/exchange/high-availability/disaster-recovery/disaster-recovery?view=exchserver-2019
- Manage messaging infrastructure lifecycle
- May include but not limited to: Plan Exchange Server installation, prepare Active Directory (AD) for Exchange, and install and update Exchange service
Manage Mail Flow Topology (35-40%)
- Plan the Transport Pipeline
- May include but not limited to: Plan transport architecture, design for multi-site mail flow, plan a high availability mail flow solution
- https://docs.microsoft.com/en-us/exchange/mail-flow/mail-flow?view=exchserver-2019
- Manage Connectors
- May include but not limited to: Plan connectors, create Send and Receive connectors, configure connectors
- https://docs.microsoft.com/en-us/exchange/mail-flow/connectors/connectors?view=exchserver-2019
- Manage Mail Flow
- May include but not limited to: Manage transport rules, manage domains, implement a multi-site mail flow
- Troubleshoot mail flow problems
- May include but not limited to: Validate inbound and outbound mail flow, examine message trace, configure message tracking, analyze message headers with the remote connectivity analyzer, handle Non-Deliverable Reports (NDRs), investigate transport logs, monitor mail flow
Manage Recipient and Devices (15-20%)
- Manage recipient resources
- May include but not limited to: Manage archive mailboxes, manage resource mailboxes, manage groups, manage mailboxes, manage mailbox permissions, configure mailbox policies, manage shared mailboxes, evaluate license options
- https://docs.microsoft.com/en-us/exchange/recipients/recipients?view=exchserver-2019
- Manage mobile devices
REF:
MS-200: Planning and Configuring a Messaging Platform – Study Guide
Exchange Architecture :
https://docs.microsoft.com/en-us/exchange/architecture/architecture?view=exchserver-2019
[PS][EX2010] E-mails Recieved per day of Month Report
.Synopsis
E-mail Counting Script v1 by ELAU 10/10/19
– Script counts emails received for each day of the current month
.DESCRIPTION
– Script pulls days of the month and counts number of emails received for each day of the current month or days specified into a HTML report.
– Script allows option to e-mail report
.EXAMPLE
– Run count.ps1 without parameters will prompt for required options
.EXAMPLE
– Specify days to go back without sending email report
count.ps1 -mailbox <mailbox to search> -day <days to search back from today>
.EXAMPLE
– Specify days to go back with sending email report
count.ps1 -mailbox <mailbox to search> -day <days to search back from today> -emailto <report to send to>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
<# .Synopsis E-mail Counting Script v1 by EPIC 10/10/19 - Script counts emails received for each day of the current month .DESCRIPTION - Script pulls days of the month and counts number of emails received for each day of the current month or days specified into a HTML report. - Script allows option to e-mail report .EXAMPLE - Run count.ps1 without parameters will prompt for required options .EXAMPLE - Specify days to go back count.ps1 -mailbox <mailbox to search> -day <days to search back from today> .EXAMPLE - Specify days to go back and email report count.ps1 -mailbox <mailbox to search> -day <days to search back from today> -emailto <report to send to> #> # Parameters Param( [Parameter(position=1)] [string]$mailbox, [Parameter(position=2)] [string]$day, [Parameter(position=3)] [string]$emailto ) # Setup Variables $smtpServer = "smtpserver.com" $emailFrom = "from@address.com" $subject = "Recieved e-mails per day" $Path = "c:\temp\test.html" [INT]$year = (Get-date).ToString("yy") [INT]$month = (Get-date).ToString("MM") $monthheader = (Get-date).ToString("MMMM,yyyy") # Prompts for input if no parmeters provided if (!$day) { [INT]$day = (Get-date).ToString("dd") [INT]$days = [datetime]::DaysInMonth($year,$month) } if (!$mailbox) { $mailbox = Read-Host -Prompt "Mailbox to Search (user@firstrepublic.com)" } If ($emailto) { $email = "sure" } elseif (!$emailto) { $email = Read-Host -Prompt "E-mail Report : Yes or No" while("yes","no" -notcontains $email) { $email = Read-Host -Prompt "E-mail Report : Yes or No" } } if ($email -eq "yes") { $emailTo = Read-Host -Prompt "E-mail to send Report (user@firstrepublic.com)" } #HTML HEADER $head = @" <title>E-mail Report</title> <style type="text/css"> table, td { border: 1px solid black; border-collapse:collapse;} tr:nth-child(odd) { background-color:lightgrey; } th { color:black; text-align:left; border: 1px solid black; font:normal 16px verdana, arial, helvetica, sans-serif; font-weight:bold; background-color: #6495ED; padding-left:6px; padding-right:6px; } </style> "@ # HTML TABLE HEADER $body += @" <table> <tr><th colspan="2">$monthheader - $mailbox</th></tr> <tr> <td>Date</td> <td>E-mails Recieved</td> </tr> "@ # Performs the search and adds HTML ROWs $i=1 Do { $start = ((get-date -hour 0 -Minute 0 -Second 0).adddays(-($day-$i+1))) $shortstart = ((get-date).adddays(-($day-$i+1)).ToString("MM-dd-yyyy")) $end = ((get-date -hour 0 -Minute 0 -Second 0).adddays(-($day-($i)))) $emails = Get-TransportServer | Get-MessageTrackingLog -ResultSize Unlimited -Start $start -End $end -EventId "Receive" -Recipient $mailbox $count = ($emails | Measure-Object).count $body += @" <tr> <td>$shortstart</td> <td>$count</td> </tr> "@ $i++ } While ($i -le $day) # HTML FOOTER $body += @" </table> "@ # Add HTML together and ouputs report $HTML = $head + $body $HTML | Out-File $Path # Sends e-mail if email is requested if ($email -eq "yes" -or $email -eq "sure") { Send-MailMessage -From $emailFrom -To $emailTo -Subject $Subject -Body $HTML -BodyAsHtml -SmtpServer $smtpServer -EA Stop 2>> $errorlog } |
[PS] [EX2010] Recoverable Folder Size Report
Recoverable Folder Size Report v1
- Crawls all mailboxes and pulls the recoverableitemsquota size
- Displays top 10 in HTML report
- Full CSV report is generated
- E-mails report with full report
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# Setup E-mail Parameters $smtpServer = "host.server.com" $emailFrom = "from@address.com" $emailTo = @('<to@address.com>') $subject = "Top Recoverable Folder Size - $date" $output = "c:\temp\output.csv" #Import Exchange 2010 Module Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010 -ErrorAction SilentlyContinue #Setup Variables [INT] $RQ = 0 [INT] $RW = 0 [INT] $DIQ = "30" [INT] $DIW = "20" $Path = "c:\temp\test.html" # #Exclusion #Check if all Database Quota matches default $Q = @(Get-mailboxdatabase | foreach {$_.recoverableitemsquota.value.tobytes()/1Gb}) foreach ($IQ in $Q) { If ($IQ -notmatch "$DIQ") { write-host $IQ + "is not set to default settings" $RQ++ } } If ($RQ -ge 1) { echo "default is not set for 1 or more mailboxes"} #Check if all Database Quota matches warning default $W = @(Get-mailboxdatabase | foreach {$_.RecoverableItemsWarningQuota.value.tobytes()/1Gb}) foreach ($IW in $W) { If ($IW -notmatch "$DIW") { write-host $IW + "is not set to default settings" $RW++ } } If ($RW -ge 1) { echo "storage default is not set for 1 or more mailboxes"} $sort = @() $output = "c:\temp\output.csv" $mailboxes = Get-mailbox -resultsize unlimited Foreach ($m in $mailboxes) { $size = Get-MailboxFolderStatistics $m -FolderScope RecoverableItems | ?{$_.Identity -match "Recoverable Items"} $sort = New-Object psobject -Property @{ mailbox = $m.alias mailboxdn = $m.distinguishedname recoversize = [math]::round($size.folderandsubfoldersize.tobytes() /1Gb, 3) } $sort | Export-Csv c:\temp\output.csv -notypeinformation -append $sort ="" } $output = "c:\temp\output.csv" $mailboxesorted = import-csv $output | sort-Object {[INT]$_.recoversize} -Descending | select -First 10 $DiskDetailHTML += "<table>" $DiskDetailHTML += "<tr><th>Mailbox</th><th>Mailbox Database</th><th>Mailbox ARC</th><th>Litigation Hold</th><th>Recoverablesize</th><th width=""400px"">Usage</th></tr>`n" #loop through all mailboxes Foreach ($mbx in $mailboxesorted) { $mbxinfo = get-mailbox $mbx.mailboxdn #grab recoverable folder stats $stat = Get-MailboxFolderStatistics $mbxinfo -FolderScope RecoverableItems | ?{$_.Identity -match "Recoverable Items"} #DB $db = $mbxinfo.database #ARC $arcdb = $mbxinfo.archivedatabase #LIT $lit = $mbxinfo.litigationholdenabled #recoveravle folder size to GB $calcrsize = $stat.folderandsubfoldersize.tobytes()/1GB $rsize = ($calcrsize).ToString("#.#######") $alias = $mbxinfo.alias #percentage $calcpercent = ($rsize/$diq) $percent = ($calcpercent).ToString("P") -replace '\s','' $fpercent = (1-$calcpercent).ToString("P") -replace '\s','' if ($percent -lt 0.01) { # $DiskDetailHTML += "<TR> <TD>$alias</TD> <TD>$db</TD> <TD>$arcdb</TD> <TD>$lit</TD> <TD>$rsize GB</TD> <TD> <table width=""100%""> <tr> <td width=""100%"" bgcolor=""green"" align=""Center"">$fpercent</td> </tr> </table> </td></tr>`n" } else { $DiskDetailHTML += "<TR> <TD>$alias</TD> <TD>$db</TD> <TD>$arcdb</TD> <TD>$lit</TD> <TD>$rsize GB</TD> <TD> <table width=""100%""> <tr> <td width=""$percent"" bgcolor=""Red"" align=""Center"">$percent</td> <td width=""$fpercent"" bgcolor=""green"" align=""Center"">$fpercent</td> </tr> </table> </td></tr>`n" # } } #Define static HTML $HeaderHTML = @" <html> <head> <style type='text/css'> body { background-color:#DCDCDC; } table { border:1px solid gray; font:normal 12px verdana, arial, helvetica, sans-serif; border-collapse: collapse; padding-left:30px; padding-right:30px; } th { color:black; text-align:left; border: 1px solid black; font:normal 16px verdana, arial, helvetica, sans-serif; font-weight:bold; background-color: #6495ED; padding-left:6px; padding-right:6px; } td { border: 1px solid black; padding-left:6px; padding-right:6px; } a.detail { cursor:pointer; color:#1E90FF; text-decoration:underline; } </style> </head> <body> <h1>Recoverable Folder Size Report</h1> <p> "@ #Define Footer HTML $FooterHTML = @" </table> </div> </body> </html> "@ #Combine all the HTML fragments and save to a file $HTML = $HeaderHTML + $DiskDetailHTML + $FooterHTML $HTML | Out-File $Path #> Send-MailMessage -From $emailFrom -To $emailTo -Subject $Subject -Attachment $output -Body $HTML -BodyAsHtml -SmtpServer $smtpServer -EA Stop 2>> $errorlog |