diff --git a/Calendar/CalLogHelpers/CalLogCSVFunctions.ps1 b/Calendar/CalLogHelpers/CalLogCSVFunctions.ps1
index 10b10d8e6b..e5e783c382 100644
--- a/Calendar/CalLogHelpers/CalLogCSVFunctions.ps1
+++ b/Calendar/CalLogHelpers/CalLogCSVFunctions.ps1
@@ -131,7 +131,6 @@ function BuildCSV {
Write-Host "Starting to Process Calendar Logs..."
$GCDOResults = @()
- $IsFromSharedCalendar = @()
$LogType = @()
$script:MailboxList = @{}
Write-Host "Creating Map of Mailboxes to CNs..."
@@ -157,8 +156,6 @@ function BuildCSV {
}
}
- $IsFromSharedCalendar = ($null -ne $CalLog.externalSharingMasterId -and $CalLog.externalSharingMasterId -ne "NotFound")
-
# Record one row
$GCDOResults += [PSCustomObject]@{
'LogRow' = $Index
@@ -169,7 +166,7 @@ function BuildCSV {
'LogClientInfoString' = $CalLog.LogClientInfoString
'TriggerAction' = $CalLog.CalendarLogTriggerAction
'ItemClass' = $ItemType
- 'Seq:Exp:ItemVersion' = $CalLog.AppointmentSequenceNumber.ToString() + ":" + $CalLog.AppointmentLastSequenceNumber.ToString() + ":" + $CalLog.ItemVersion.ToString()
+ 'Seq:Exp:ItemVersion' = CompressVersionInfo($CalLog)
'Organizer' = $CalLog.From.FriendlyDisplayName
'From' = GetBestFromAddress($CalLog.From)
'FreeBusy' = $CalLog.FreeBusyStatus.ToString()
@@ -178,8 +175,6 @@ function BuildCSV {
'LogFolder' = $CalLog.ParentDisplayName
'OriginalLogFolder' = $CalLog.OriginalParentDisplayName
'SharedFolderName' = MapSharedFolder($CalLog.ExternalSharingMasterId)
- 'IsFromSharedCalendar' = $IsFromSharedCalendar
- 'ExternalSharingMasterId' = $CalLog.ExternalSharingMasterId
'ReceivedBy' = $CalLog.ReceivedBy.SmtpEmailAddress
'ReceivedRepresenting' = $CalLog.ReceivedRepresenting.SmtpEmailAddress
'MeetingRequestType' = $CalLog.MeetingRequestType.ToString()
@@ -193,7 +188,7 @@ function BuildCSV {
'RecurrencePattern' = $CalLog.RecurrencePattern
'AppointmentAuxiliaryFlags' = $CalLog.AppointmentAuxiliaryFlags.ToString()
'DisplayAttendeesAll' = $CalLog.DisplayAttendeesAll
- 'AttendeeCount' = ($CalLog.DisplayAttendeesAll -split ';').Count
+ 'AttendeeCount' = GetAttendeeCount($CalLog.DisplayAttendeesAll)
'AppointmentState' = $CalLog.AppointmentState.ToString()
'ResponseType' = $CalLog.ResponseType.ToString()
'ClientIntent' = $CalLog.ClientIntent.ToString()
@@ -205,7 +200,6 @@ function BuildCSV {
'SendMeetingMessagesDiagnostics' = $CalLog.SendMeetingMessagesDiagnostics
'AttendeeCollection' = MultiLineFormat($CalLog.AttendeeCollection)
'CalendarLogRequestId' = $CalLog.CalendarLogRequestId.ToString() # Move to front.../ Format in groups???
- 'CleanGlobalObjectId' = $CalLog.CleanGlobalObjectId
}
}
$script:EnhancedCalLogs = $GCDOResults
@@ -225,3 +219,38 @@ function ConvertDateTime {
}
return [DateTime]$DateTime
}
+
+function GetAttendeeCount {
+ param(
+ [string] $AttendeeCollection
+ )
+ if ($From.SmtpAddress -ne "NotFound") {
+ return ($AttendeeCollection -split ';').Count
+ } else {
+ return "-"
+ }
+}
+
+function CompressVersionInfo {
+ param(
+ $CalLog
+ )
+ [string] $CompressedString = ""
+ if ($CalLog.AppointmentSequenceNumber -eq "NotFound" -or [string]::IsNullOrEmpty($CalLog.AppointmentSequenceNumber)) {
+ $CompressedString = "-:"
+ } else {
+ $CompressedString = $CalLog.AppointmentSequenceNumber.ToString() + ":"
+ }
+ if ($CalLog.AppointmentLastSequenceNumber -eq "NotFound" -or [string]::IsNullOrEmpty($CalLog.AppointmentLastSequenceNumber)) {
+ $CompressedString += "-:"
+ } else {
+ $CompressedString += $CalLog.AppointmentLastSequenceNumber.ToString() + ":"
+ }
+ if ($CalLog.ItemVersion -eq "NotFound" -or [string]::IsNullOrEmpty($CalLog.ItemVersion)) {
+ $CompressedString += "-"
+ } else {
+ $CompressedString += $CalLog.ItemVersion.ToString()
+ }
+
+ return $CompressedString
+}
diff --git a/Calendar/CalLogHelpers/CalLogInfoFunctions.ps1 b/Calendar/CalLogHelpers/CalLogInfoFunctions.ps1
index fccfcd6897..33f7eeac95 100644
--- a/Calendar/CalLogHelpers/CalLogInfoFunctions.ps1
+++ b/Calendar/CalLogHelpers/CalLogInfoFunctions.ps1
@@ -116,7 +116,7 @@ function SetLogType {
$ShortClientName -eq "CalendarReplication" -or
$CalendarItemTypes.($CalLog.ItemClass) -eq "SharingCFM" -or
$CalendarItemTypes.($CalLog.ItemClass) -eq "SharingDelete") {
- return "Sharing"
+ return "Sync"
} elseif ($ShortClientName -eq "Other EBA" -or
$ShortClientName -eq "Other TBA" -or
$ShortClientName -eq "LocationProcessor" -or
@@ -129,6 +129,7 @@ function SetLogType {
return "Exception"
} elseif (($CalendarItemTypes.($CalLog.ItemClass) -like "*Resp*" -and $CalLog.CalendarLogTriggerAction -ne "Create" ) -or
$CalendarItemTypes.($CalLog.ItemClass) -eq "AttendeeList" -or
+ ($CalendarItemTypes.($CalLog.ItemClass) -eq "Forward.Notification" -and ($CalLog.CalendarLogTriggerAction -eq "SoftDelete") -or $CalLog.CalendarLogTriggerAction -like "*move*") -or
($CalLog.ItemClass -eq "IPM.Schedule.Meeting.Request" -and $CalLog.CalendarLogTriggerAction -like "*move*" ) ) {
return "Cleanup"
} else {
diff --git a/Calendar/CalLogHelpers/CreateTimelineRow.ps1 b/Calendar/CalLogHelpers/CreateTimelineRow.ps1
index 0df30ef4b9..5ed3a44ffd 100644
--- a/Calendar/CalLogHelpers/CreateTimelineRow.ps1
+++ b/Calendar/CalLogHelpers/CreateTimelineRow.ps1
@@ -97,13 +97,13 @@ function CreateTimelineRow {
} else {
switch ($CalLog.Client) {
ResourceBookingAssistant {
- [array] $Output = "ResourceBookingAssistant $($Action) a $($MeetingRespType) Meeting Response message."
+ [array] $Output = "ResourceBookingAssistant $($Action) a $($MeetingRespType) Meeting Response message$($Extra)."
}
Transport {
- [array] $Output = "[$($CalLog.From)] $($Action) $($MeetingRespType) Meeting Response message."
+ [array] $Output = "[$($CalLog.From)] $($Action) $($MeetingRespType) Meeting Response message$($Extra)."
}
default {
- [array] $Output = "[$($CalLog.ResponsibleUser)] $($Action) [$($CalLog.Organizer)]'s $($MeetingRespType) Meeting Response with $($CalLog.Client)."
+ [array] $Output = "[$($CalLog.ResponsibleUser)] $($Action) [$($CalLog.Organizer)]'s $($MeetingRespType) Meeting Response with $($CalLog.Client)$($Extra)."
}
}
}
@@ -114,7 +114,7 @@ function CreateTimelineRow {
}
Exception {
if ($CalLog.ResponsibleUser -ne "Calendar Assistant") {
- [array] $Output = "[$($CalLog.ResponsibleUser)] $($CalLog.TriggerAction)d Exception to the meeting series with $($CalLog.Client)."
+ [array] $Output = "[$($CalLog.ResponsibleUser)] $($CalLog.TriggerAction)d Exception starting $($CalLog.StartTime) to the meeting series with $($CalLog.Client)."
}
}
Ipm.Appointment {
diff --git a/Calendar/CalLogHelpers/ExcelModuleInstaller.ps1 b/Calendar/CalLogHelpers/ExcelModuleInstaller.ps1
index 3f542ee0c6..b04a2b4495 100644
--- a/Calendar/CalLogHelpers/ExcelModuleInstaller.ps1
+++ b/Calendar/CalLogHelpers/ExcelModuleInstaller.ps1
@@ -34,7 +34,9 @@ function CheckExcelModuleInstalled {
# Install ImportExcel module
Install-Module -Name ImportExcel -Force -AllowClobber
- Write-Host "Done. ImportExcel module is now installed."
+ Write-Host -ForegroundColor Green "Done. ImportExcel module is now installed."
+ Write-Host -ForegroundColor Yellow "Please rerun the Script to get your Calendar Logs."
+ exit
}
}
}
diff --git a/Calendar/CalLogHelpers/ExportToExcelFunctions.ps1 b/Calendar/CalLogHelpers/ExportToExcelFunctions.ps1
index b7153135a1..66e566e9c6 100644
--- a/Calendar/CalLogHelpers/ExportToExcelFunctions.ps1
+++ b/Calendar/CalLogHelpers/ExportToExcelFunctions.ps1
@@ -15,6 +15,50 @@ function Export-CalLogExcel {
# Export Raw Logs for Developer Analysis
Write-Host -ForegroundColor Cyan "Exporting Raw CalLogs to Excel Tab [$($ShortId + "_Raw")]..."
$script:GCDO | Export-Excel -Path $FileName -WorksheetName $($ShortId + "_Raw") -AutoFilter -FreezeTopRow -BoldTopRow -MoveToEnd
+ LogScriptInfo
+}
+
+function LogScriptInfo {
+ # Only need to run once per script.
+ if ($null -eq $script:CollectedCmdLine) {
+ $RunInfo = @()
+ $RunInfo += [PSCustomObject]@{
+ Key = "Script Name"
+ Value = $($script:command.MyCommand.Name)
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key ="RunTime"
+ Value = Get-Date
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "Command Line"
+ Value = $($script:command.Line)
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "Script Version"
+ Value = $script:Version
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "User"
+ Value = whoami.exe
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "PowerShell Version"
+ Value = $PSVersionTable.PSVersion
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "OS Version"
+ Value = $(Get-CimInstance -ClassName Win32_OperatingSystem).Version
+ }
+ $RunInfo += [PSCustomObject]@{
+ Key = "More Info"
+ Value = "https://learn.microsoft.com/en-us/exchange/troubleshoot/calendars/analyze-calendar-diagnostic-logs"
+ }
+
+ $RunInfo | Export-Excel -Path $FileName -WorksheetName "Script Info" -MoveToEnd
+ $script:CollectedCmdLine = $true
+ }
+ # If someone runs the script the script again logs will update, but ScriptInfo done not update. Need to add new table for each run.
}
function Export-TimelineExcel {
@@ -62,16 +106,20 @@ $ConditionalFormatting = $(
# Client, ShortClientInfoString and LogClientInfoString
New-ConditionalText "Outlook" -ConditionalTextColor Green -BackgroundColor $null
New-ConditionalText "OWA" -ConditionalTextColor DarkGreen -BackgroundColor $null
+ New-ConditionalText "Teams" -ConditionalTextColor DarkGreen -BackgroundColor $null
New-ConditionalText "Transport" -ConditionalTextColor Blue -BackgroundColor $null
New-ConditionalText "Repair" -ConditionalTextColor DarkRed -BackgroundColor LightPink
New-ConditionalText "Other ?BA" -ConditionalTextColor Orange -BackgroundColor $null
+ New-ConditionalText "TimeService" -ConditionalTextColor Orange -BackgroundColor $null
New-ConditionalText "Other REST" -ConditionalTextColor DarkRed -BackgroundColor $null
+ New-ConditionalText "Unknown" -ConditionalTextColor DarkRed -BackgroundColor $null
New-ConditionalText "ResourceBookingAssistant" -ConditionalTextColor Blue -BackgroundColor $null
- #LogType
- New-ConditionalText -Range "C3:C9999" -ConditionalType ContainsText -Text "Ignorable" -ConditionalTextColor DarkRed -BackgroundColor $null
- New-ConditionalText -Range "C:C" -ConditionalType ContainsText -Text "Cleanup" -ConditionalTextColor DarkRed -BackgroundColor $null
- New-ConditionalText -Range "C:C" -ConditionalType ContainsText -Text "Sharing" -ConditionalTextColor Blue -BackgroundColor $null
+ #LogType -Would like to Hide "Ignorable" and "Cleanup" rows by default.
+ New-ConditionalText -Range "C3:C9999" -ConditionalType ContainsText -Text "Ignorable" -ConditionalTextColor Orange -BackgroundColor $null
+ New-ConditionalText -Range "C:C" -ConditionalType ContainsText -Text "Cleanup" -ConditionalTextColor Orange -BackgroundColor $null
+ New-ConditionalText -Range "C:C" -ConditionalType ContainsText -Text "Sync" -ConditionalTextColor Blue -BackgroundColor $null
+ New-ConditionalText -Range "C:C" -ConditionalType ContainsText -Text "Core" -ConditionalTextColor Green -BackgroundColor $null
# TriggerAction
New-ConditionalText -Range "G:G" -ConditionalType ContainsText -Text "Create" -ConditionalTextColor Green -BackgroundColor $null
@@ -89,18 +137,21 @@ $ConditionalFormatting = $(
New-ConditionalText -Range "L3:L9999" -ConditionalType ContainsText -Text "Busy" -ConditionalTextColor Green -BackgroundColor $null
#Shared Calendar information
- New-ConditionalText -Range "Q3:Q9999" -ConditionalType NotEqual -Text "Not Shared" -ConditionalTextColor Blue -BackgroundColor $null
- New-ConditionalText -Range "R:R" -ConditionalType ContainsText -Text "TRUE" -ConditionalTextColor Blue -BackgroundColor $null
- New-ConditionalText -Range "S:S" -ConditionalType NotEqual -Text "NotFound" -ConditionalTextColor Blue -BackgroundColor $null
+ New-ConditionalText -Range "Q3:Q9999" -ConditionalType Equal -Text "Not Shared" -ConditionalTextColor Blue -BackgroundColor $null
+ New-ConditionalText -Range "Q3:Q9999" -ConditionalType Equal -Text "TRUE" -ConditionalTextColor Blue -BackgroundColor Orange
#MeetingRequestType
- New-ConditionalText -Range "V:V" -ConditionalType ContainsText -Text "Outdated" -ConditionalTextColor DarkRed -BackgroundColor LightPink
+ New-ConditionalText -Range "T:T" -ConditionalType ContainsText -Text "Outdated" -ConditionalTextColor DarkRed -BackgroundColor LightPink
+
+ #CalendarItemType
+ New-ConditionalText -Range "AA3:AA9999" -ConditionalType ContainsText -Text "RecurringMaster" -ConditionalTextColor $null -BackgroundColor Plum
#AppointmentAuxiliaryFlags
- New-ConditionalText -Range "AE3:AE9999" -ConditionalType ContainsText -Text "Copied" -ConditionalTextColor DarkRed -BackgroundColor LightPink
+ New-ConditionalText -Range "AD3:AD9999" -ConditionalType ContainsText -Text "Copied" -ConditionalTextColor DarkRed -BackgroundColor LightPink
+ New-ConditionalText -Range "AC3:AC9999" -ConditionalType ContainsText -Text "ForwardedAppointment" -ConditionalTextColor DarkRed -BackgroundColor $null
#ResponseType
- New-ConditionalText -Range "AI3:AI9999" -ConditionalType ContainsText -Text "Organizer" -ConditionalTextColor Orange -BackgroundColor $null
+ New-ConditionalText -Range "AG3:AG9999" -ConditionalType ContainsText -Text "Organizer" -ConditionalTextColor Orange -BackgroundColor $null
)
function FormatHeader {
@@ -116,8 +167,8 @@ function FormatHeader {
Set-CellComment -Text "This is the Enhanced Calendar Logs for [$Identity] for MeetingID `n [$($script:GCDO[0].CleanGlobalObjectId)]." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 20 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment center #LogTimestamp
Set-CellComment -Text "LogTimestamp: Time when the change was recorded in the CalLogs. This and all Times are in UTC." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 11 -HorizontalAlignment center # LogType
- Set-CellComment -Text "LogType: Grouping of logs so ignorable ones can be quickly filtered?" -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
+ $sheet.Column(++$n) | Set-ExcelRange -Width 11 -HorizontalAlignment center # LogType
+ Set-CellComment -Text "LogType: Core logs are what to focus on, to start with, filter all the others out." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # SubjectProperty
Set-CellComment -Text "SubjectProperty: The Subject of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # Client
@@ -144,21 +195,17 @@ function FormatHeader {
Set-CellComment -Text "LogFolder (ParentDisplayName): The Log Folder that the CalLog was in." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 16 -HorizontalAlignment Left # OriginalLogFolder
Set-CellComment -Text "OriginalLogFolder (OriginalParentDisplayName): The Original Log Folder that the item was in / delivered to." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 15 -HorizontalAlignment Right # SharedFolderName
+ $sheet.Column(++$n) | Set-ExcelRange -Width 15 -HorizontalAlignment Left # SharedFolderName
Set-CellComment -Text "SharedFolderName: Was this from a Modern Sharing, and if so what Folder." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # IsFromSharedCalendar
- Set-CellComment -Text "IsFromSharedCalendar: Is this CalLog from a Modern Sharing relationship?" -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # ExternalSharingMasterId
- Set-CellComment -Text "ExternalSharingMasterId: If this is not [NotFound], then it is from a Modern Sharing relationship." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment Left # ReceivedBy
Set-CellComment -Text "ReceivedBy: The Receiver of the Calendar Item. Should always be the owner of the Mailbox." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment Left # ReceivedRepresenting
Set-CellComment -Text "ReceivedRepresenting: Who the item was Received for, of then the Delegate." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # MeetingRequestType
Set-CellComment -Text "MeetingRequestType: The Meeting Request Type of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 20 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment center # StartTime
+ $sheet.Column(++$n) | Set-ExcelRange -Width 23 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment center # StartTime
Set-CellComment -Text "StartTime: The Start Time of the Meeting. This and all Times are in UTC." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 20 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment center # EndTime
+ $sheet.Column(++$n) | Set-ExcelRange -Width 23 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment center # EndTime
Set-CellComment -Text "EndTime: The End Time of the Meeting. This and all Times are in UTC." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 17 -NumberFormat "m/d/yyyy h:mm:ss" -HorizontalAlignment Left # OriginalStartDate
Set-CellComment -Text "OriginalStartDate: The Original Start Date of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
@@ -172,13 +219,13 @@ function FormatHeader {
Set-CellComment -Text "IsException: Is this an Exception?" -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # RecurrencePattern
Set-CellComment -Text "RecurrencePattern: The Recurrence Pattern of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 30 -HorizontalAlignment Center # AppointmentAuxiliaryFlags
+ $sheet.Column(++$n) | Set-ExcelRange -Width 30 -HorizontalAlignment Center # AppointmentAuxiliaryFlags
Set-CellComment -Text "AppointmentAuxiliaryFlags: The Appointment Auxiliary Flags of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 30 -HorizontalAlignment Left # DisplayAttendeesAll
Set-CellComment -Text "DisplayAttendeesAll: List of the Attendees of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # AttendeeCount
+ $sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # AttendeeCount
Set-CellComment -Text "AttendeeCount: The Attendee Count." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # AppointmentState
+ $sheet.Column(++$n) | Set-ExcelRange -Width 20 -HorizontalAlignment Left # AppointmentState
Set-CellComment -Text "AppointmentState: The Appointment State of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # ResponseType
Set-CellComment -Text "ResponseType: The Response Type of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
@@ -194,18 +241,17 @@ function FormatHeader {
Set-CellComment -Text "IsAllDayEvent: Is this an All Day Event?" -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
$sheet.Column(++$n) | Set-ExcelRange -Width 10 -HorizontalAlignment center # IsSeriesCancelled
Set-CellComment -Text "IsSeriesCancelled: Is this a Series Cancelled Meeting?" -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 30 -HorizontalAlignment Left # SendMeetingMessagesDiagnostics
+ $sheet.Column(++$n) | Set-ExcelRange -Width 30 -HorizontalAlignment Left # SendMeetingMessagesDiagnostics
Set-CellComment -Text "SendMeetingMessagesDiagnostics: Compound Property to describe why meeting was or was not sent to everyone." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 50 -HorizontalAlignment Left # AttendeeCollection
+ $sheet.Column(++$n) | Set-ExcelRange -Width 50 -HorizontalAlignment Left # AttendeeCollection
Set-CellComment -Text "AttendeeCollection: The Attendee Collection of the Meeting, use -TrackingLogs to get values." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 40 -HorizontalAlignment Center # CalendarLogRequestId
+ $sheet.Column(++$n) | Set-ExcelRange -Width 40 -HorizontalAlignment Center # CalendarLogRequestId
Set-CellComment -Text "CalendarLogRequestId: The Calendar Log Request ID of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
- $sheet.Column(++$n) | Set-ExcelRange -Width 120 -HorizontalAlignment Left # CleanGlobalObjectId
- Set-CellComment -Text "CleanGlobalObjectId: The Clean Global Object ID of the Meeting." -Row $HeaderRow -ColumnNumber $n -Worksheet $sheet
# Update header rows after all the others have been set.
# Title Row
$sheet.Row(1) | Set-ExcelRange -HorizontalAlignment Left
+ Set-CellComment -Text "For more information see: https://learn.microsoft.com/en-us/exchange/troubleshoot/calendars/analyze-calendar-diagnostic-logs." -Row 1 -ColumnNumber 1 -Worksheet $sheet
# Set the Header row to be bold and left aligned
$sheet.Row($HeaderRow) | Set-ExcelRange -Bold -HorizontalAlignment Left
diff --git a/Calendar/CalLogHelpers/Invoke-GetCalLogs.ps1 b/Calendar/CalLogHelpers/Invoke-GetCalLogs.ps1
index fdc4843d12..a8e0879612 100644
--- a/Calendar/CalLogHelpers/Invoke-GetCalLogs.ps1
+++ b/Calendar/CalLogHelpers/Invoke-GetCalLogs.ps1
@@ -21,6 +21,7 @@ $script:CustomPropertyNameList =
"FreeBusyStatus",
"From",
"HasAttachment",
+"InternetMessageId",
"ItemID",
"IsAllDayEvent",
"IsCancelled",
@@ -39,6 +40,10 @@ $script:CustomPropertyNameList =
$LogLimit = 2000
+if ($ShortLogs.IsPresent) {
+ $LogLimit = 500
+}
+
<#
.SYNOPSIS
Run Get-CalendarDiagnosticObjects for passed in User with Subject or MeetingID.
diff --git a/Calendar/CalLogHelpers/Invoke-GetMailbox.ps1 b/Calendar/CalLogHelpers/Invoke-GetMailbox.ps1
index 92795adf59..4c928e0606 100644
--- a/Calendar/CalLogHelpers/Invoke-GetMailbox.ps1
+++ b/Calendar/CalLogHelpers/Invoke-GetMailbox.ps1
@@ -226,7 +226,7 @@ function GetSMTPAddress {
return $PassedCN
} else {
# We have a problem, we don't have a CN or an SMTP Address
- Write-Error "GetSMTPAddress: Passed in Value does not look like a CN or SMTP Address: [$PassedCN]"
+ Write-Warning "GetSMTPAddress: Passed in Value does not look like a CN or SMTP Address: [$PassedCN]"
return $PassedCN
}
}
diff --git a/Calendar/CalLogHelpers/ShortClientNameFunctions.ps1 b/Calendar/CalLogHelpers/ShortClientNameFunctions.ps1
index 9148542442..36ba1d591a 100644
--- a/Calendar/CalLogHelpers/ShortClientNameFunctions.ps1
+++ b/Calendar/CalLogHelpers/ShortClientNameFunctions.ps1
@@ -18,7 +18,7 @@ function FindMatch {
$ShortClientNameProcessor = @{
'Client=Hub Transport' = "Transport"
- 'Client=MSExchangeRPC' = "Outlook : Desktop : MAPI"
+ 'Client=MSExchangeRPC' = "Outlook:Desktop:MAPI"
'OneOutlook' = "NewOutlook"
'Lync for Mac' = "LyncMac"
'MicrosoftNinja' = "Teams"
@@ -119,6 +119,8 @@ function CreateShortClientName {
$LogClientInfoString -like "*43375d74-c6a5-4d4e-a0a3-de139860ea75*" -or
$LogClientInfoString -like "*af9fc99a-5ae5-46e1-bbd7-fa25088e16c9*") {
$ShortClientName = "ELC-B2"
+ } elseif ($LogClientInfoString -like "*AppId=de8bc8b5-d9f9-48b1-a8ad-b748da725064*") {
+ $ShortClientName = "GraphExplorer"
} elseif ($LogClientInfoString -like "*Outlook-iOS*") {
$ShortClientName = "OutlookiOS"
} elseif ($LogClientInfoString -like "*Outlook-Android*") {
diff --git a/Calendar/CalLogHelpers/TimelineFunctions.ps1 b/Calendar/CalLogHelpers/TimelineFunctions.ps1
index aa40f1f67a..7a33eefc74 100644
--- a/Calendar/CalLogHelpers/TimelineFunctions.ps1
+++ b/Calendar/CalLogHelpers/TimelineFunctions.ps1
@@ -67,7 +67,7 @@ function BuildTimeline {
FindOrganizer($script:FirstLog)
# Ignorable and items from Shared Calendars are not included in the TimeLine.
- [array]$InterestingCalLogs = $script:EnhancedCalLogs | Where-Object { $_.LogType -eq "Core" -and $_.IsFromSharedCalendar -eq $False }
+ [array]$InterestingCalLogs = $script:EnhancedCalLogs | Where-Object { $_.LogType -eq "Core" -and $_.SharedFolderName -eq "Not Shared" }
if ($InterestingCalLogs.count -eq 0) {
Write-Host "All CalLogs are Ignorable, nothing to create a timeline with, displaying initial values."
@@ -81,6 +81,8 @@ function BuildTimeline {
}
Write-DashLineBoxColor " TimeLine for: [$Identity]",
+ "CollectionDate: $($(Get-Date).ToString("yyyy-MM-dd HH:mm:ss"))",
+ "ScriptVersion: $ScriptVersion",
" Subject: $($script:GCDO[0].NormalizedSubject)",
" Organizer: $Script:Organizer",
" MeetingID: $($script:GCDO[0].CleanGlobalObjectId)"
diff --git a/Calendar/Get-CalendarDiagnosticObjectsSummary.ps1 b/Calendar/Get-CalendarDiagnosticObjectsSummary.ps1
index ae6c1ee7ed..e635b625bd 100644
--- a/Calendar/Get-CalendarDiagnosticObjectsSummary.ps1
+++ b/Calendar/Get-CalendarDiagnosticObjectsSummary.ps1
@@ -82,6 +82,11 @@ if (Test-ScriptVersion -AutoUpdate -VersionsUrl "https://aka.ms/CL-VersionsUrl"
return
}
+$script:command = $MyInvocation
+Write-Host -ForegroundColor Blue "The script was started with the following command line:"
+Write-Host -ForegroundColor Blue "Name:" $command.MyCommand.name
+Write-Host -ForegroundColor Blue "Command Line:" $command.line
+
Write-Verbose "Script Versions: $BuildVersion"
# ===================================================================================================
@@ -191,12 +196,13 @@ if (-not ([string]::IsNullOrEmpty($Subject)) ) {
}
Write-DashLineBoxColor "Hope this script was helpful in getting and understanding the Calendar Logs.",
+"More Info on Getting the logs: https://learn.microsoft.com/en-us/exchange/troubleshoot/calendars/get-calendar-diagnostic-logs",
+"and on Analyzing the logs: https://learn.microsoft.com/en-us/exchange/troubleshoot/calendars/analyze-calendar-diagnostic-logs",
"If you have issues or suggestion for this script, please send them to: ",
-"`t CalLogFormatterDevs@microsoft.com" -Color Yellow -DashChar =
+"`t CalLogFormatterDevs@microsoft.com" -Color Yellow -DashChar "="
if ($ExportToExcel.IsPresent) {
Write-Host
Write-Host -ForegroundColor Blue -NoNewline "All Calendar Logs are saved to: "
Write-Host -ForegroundColor Yellow ".\$Filename"
- Write-Host
}
diff --git a/Calendar/Tests/ShortClientNameFunctions.Tests.ps1 b/Calendar/Tests/ShortClientNameFunctions.Tests.ps1
index a0ff932081..b6705a42ef 100644
--- a/Calendar/Tests/ShortClientNameFunctions.Tests.ps1
+++ b/Calendar/Tests/ShortClientNameFunctions.Tests.ps1
@@ -17,14 +17,14 @@ Describe "CreateShortClientName" {
}
Context "When LogClientInfoString is Client=MSExchangeRPC" {
- It "Should return 'Outlook : Desktop : MAPI'" {
+ It "Should return 'Outlook:Desktop:MAPI'" {
$result = CreateShortClientName -LogClientInfoString "Client=MSExchangeRPC"
- $result | Should -Be "Outlook : Desktop : MAPI"
+ $result | Should -Be "Outlook:Desktop:MAPI"
}
}
Context "When LogClientInfoString is Client=WebServices;Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.17328; Pro);;Client=WebServices;ExchangeServicesClient/0.9.248.0;" {
- It "Should return 'Outlook : Desktop : MAPI' if LogClientInfoString FileContentMatch 'AppId=bcad1a65-78eb-4725-9bce-ce1a8ed30b95'" {
+ It "Should return 'Outlook:Desktop:MAPI' if LogClientInfoString FileContentMatch 'AppId=bcad1a65-78eb-4725-9bce-ce1a8ed30b95'" {
$result = CreateShortClientName "Client=WebServices;Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.17328; Pro);;Client=WebServices;ExchangeServicesClient/0.9.248.0;"
$result | Should -Be "Outlook : Desktop"
}
@@ -169,7 +169,7 @@ Describe "CreateShortClientName-FindMatch" {
Context 'Test CreateShortClientName focusing on the FindMatch function' -ForEach @(
@{ LogClientInfoString = 'Client=Hub Transport'; Expected = "Transport" },
- @{ LogClientInfoString = 'Client=MSExchangeRPC'; Expected = "Outlook : Desktop : MAPI" },
+ @{ LogClientInfoString = 'Client=MSExchangeRPC'; Expected = "Outlook:Desktop:MAPI" },
@{ LogClientInfoString = 'OneOutlook'; Expected = "NewOutlook" },
@{ LogClientInfoString = 'Lync for Mac'; Expected = "LyncMac" },
@{ LogClientInfoString = 'AppId=00000004-0000-0ff1-ce00-000000000000'; Expected = "SkypeMMS" },
diff --git a/Diagnostics/ExchangeLogCollector/ExchangeLogCollector.ps1 b/Diagnostics/ExchangeLogCollector/ExchangeLogCollector.ps1
index d1143cf622..3540158137 100644
--- a/Diagnostics/ExchangeLogCollector/ExchangeLogCollector.ps1
+++ b/Diagnostics/ExchangeLogCollector/ExchangeLogCollector.ps1
@@ -14,10 +14,12 @@ param (
[bool]$AppSysLogsToXml = $true,
[switch]$AutoDLogs,
[switch]$CollectFailoverMetrics,
+ [switch]$ConversationLogs,
[switch]$DAGInformation,
[switch]$DailyPerformanceLogs,
[switch]$EASLogs,
[switch]$ECPLogs,
+ [switch]$EventBasedAssistantsLogs,
[switch]$EWSLogs,
[Alias("ExchangeServerInfo")]
[switch]$ExchangeServerInformation,
diff --git a/Diagnostics/ExchangeLogCollector/Helpers/Get-ArgumentList.ps1 b/Diagnostics/ExchangeLogCollector/Helpers/Get-ArgumentList.ps1
index 72bd9d454f..db99f9b533 100644
--- a/Diagnostics/ExchangeLogCollector/Helpers/Get-ArgumentList.ps1
+++ b/Diagnostics/ExchangeLogCollector/Helpers/Get-ArgumentList.ps1
@@ -31,11 +31,13 @@ function Get-ArgumentList {
AppSysLogsToXml = $AppSysLogsToXml
AutoDLogs = $AutoDLogs
CollectAllLogsBasedOnLogAge = $CollectAllLogsBasedOnLogAge
+ ConversationLogs = $ConversationLogs
DAGInformation = $DAGInformation
DailyPerformanceLogs = $DailyPerformanceLogs
TransportLogging = $TransportLogging
EASLogs = $EASLogs
ECPLogs = $ECPLogs
+ EventBasedAssistantsLogs = $EventBasedAssistantsLogs
EWSLogs = $EWSLogs
ExchangeServerInformation = $ExchangeServerInformation
ExMon = $ExMon
diff --git a/Diagnostics/ExchangeLogCollector/Helpers/Test-NoSwitchesProvided.ps1 b/Diagnostics/ExchangeLogCollector/Helpers/Test-NoSwitchesProvided.ps1
index b80a1c4535..30cab4d71d 100644
--- a/Diagnostics/ExchangeLogCollector/Helpers/Test-NoSwitchesProvided.ps1
+++ b/Diagnostics/ExchangeLogCollector/Helpers/Test-NoSwitchesProvided.ps1
@@ -7,6 +7,8 @@ function Test-NoSwitchesProvided {
$IISLogs -or
$DailyPerformanceLogs -or
$ManagedAvailabilityLogs -or
+ $ConversationLogs -or
+ $EventBasedAssistantsLogs -or
$ExPerfWiz -or
$RPCLogs -or
$EASLogs -or
diff --git a/Diagnostics/ExchangeLogCollector/Helpers/Test-PossibleCommonScenarios.ps1 b/Diagnostics/ExchangeLogCollector/Helpers/Test-PossibleCommonScenarios.ps1
index d656a9f16c..5567123865 100644
--- a/Diagnostics/ExchangeLogCollector/Helpers/Test-PossibleCommonScenarios.ps1
+++ b/Diagnostics/ExchangeLogCollector/Helpers/Test-PossibleCommonScenarios.ps1
@@ -35,6 +35,8 @@ function Test-PossibleCommonScenarios {
$Script:TransportProtocolLogs = $true
$Script:MitigationService = $true
$Script:MailboxAssistantsLogs = $true
+ $Script:EventBasedAssistantsLogs = $true
+ $Script:ConversationLogs = $true
}
if ($TransportLogging) {
@@ -51,6 +53,7 @@ function Test-PossibleCommonScenarios {
$Script:PipelineTracingLogs = $true
$Script:TransportRules = $true
$Script:AcceptedRemoteDomain = $true
+ $Script:EventBasedAssistantsLogs = $true
}
if ($TransportConnectivityLogs) {
diff --git a/Diagnostics/ExchangeLogCollector/RemoteScriptBlock/Invoke-RemoteMain.ps1 b/Diagnostics/ExchangeLogCollector/RemoteScriptBlock/Invoke-RemoteMain.ps1
index 672ca814cb..e7b5d9efdd 100644
--- a/Diagnostics/ExchangeLogCollector/RemoteScriptBlock/Invoke-RemoteMain.ps1
+++ b/Diagnostics/ExchangeLogCollector/RemoteScriptBlock/Invoke-RemoteMain.ps1
@@ -204,6 +204,16 @@ function Invoke-RemoteMain {
Add-LogCopyFullTaskAction $Script:localServerObject.TransportInfo.MBXLoggingInfo.PipelineTracingPath "Mailbox_Pipeline_Tracing_Logs"
}
}
+
+ if ($PassedInfo.EventBasedAssistantsLogs -and $Script:localServerObject.Mailbox) {
+ Add-LogCopyFullTaskAction "$Script:localExInstall`Logging\EventBasedAssistants" "Event_Based_Assistants_Logs"
+ Add-LogCopyFullTaskAction "$Script:localExInstall`Logging\EventBasedAssistantsCollection" "Event_Based_Assistants_Collection_Logs"
+ }
+
+ if ($PassedInfo.ConversationLogs -and $Script:localServerObject.Mailbox) {
+ Add-DefaultLogCopyTaskAction "$Script:localExInstall`Logging\ConversationAggregationLog" "Conversation_Aggregation_Logs"
+ Add-DefaultLogCopyTaskAction "$Script:localExInstall`Logging\ConversationProcessingLog" "Conversation_Processing_Logs"
+ }
}
############################################
diff --git a/Diagnostics/HealthChecker/Analyzer/Invoke-AnalyzerExchangeInformation.ps1 b/Diagnostics/HealthChecker/Analyzer/Invoke-AnalyzerExchangeInformation.ps1
index c6ecf5a667..8033ba19f1 100644
--- a/Diagnostics/HealthChecker/Analyzer/Invoke-AnalyzerExchangeInformation.ps1
+++ b/Diagnostics/HealthChecker/Analyzer/Invoke-AnalyzerExchangeInformation.ps1
@@ -549,6 +549,33 @@ function Invoke-AnalyzerExchangeInformation {
}
}
+ $monitoringOverrides = New-Object System.Collections.Generic.List[object]
+ foreach ($monitoringOverride in $HealthServerObject.OrganizationInformation.GetGlobalMonitoringOverride.SimpleView) {
+ $monitoringOverrides.Add($monitoringOverride)
+ }
+ foreach ($monitoringOverride in $exchangeInformation.GetServerMonitoringOverride.SimpleView) {
+ $monitoringOverrides.Add($monitoringOverride)
+ }
+
+ $monitoringOverridesDetected = $monitoringOverrides.Count -gt 0
+ $params = $baseParams + @{
+ Name = "Monitoring Overrides Detected"
+ Details = $monitoringOverridesDetected
+ }
+
+ Add-AnalyzedResultInformation @params
+
+ if ($monitoringOverridesDetected) {
+ $params = $baseParams + @{
+ OutColumns = ([PSCustomObject]@{
+ DisplayObject = $monitoringOverrides
+ IndentSpaces = 12
+ })
+ HtmlName = "Monitoring Overrides"
+ }
+ Add-AnalyzedResultInformation @params
+ }
+
if ($null -ne $exchangeInformation.EdgeTransportResourceThrottling) {
try {
# SystemMemory does not block mail flow.
diff --git a/Diagnostics/HealthChecker/DataCollection/ExchangeInformation/Get-ExchangeInformation.ps1 b/Diagnostics/HealthChecker/DataCollection/ExchangeInformation/Get-ExchangeInformation.ps1
index b510737207..86f60eeff6 100644
--- a/Diagnostics/HealthChecker/DataCollection/ExchangeInformation/Get-ExchangeInformation.ps1
+++ b/Diagnostics/HealthChecker/DataCollection/ExchangeInformation/Get-ExchangeInformation.ps1
@@ -8,6 +8,7 @@
. $PSScriptRoot\..\..\..\..\Shared\Get-ExchangeSettingOverride.ps1
. $PSScriptRoot\..\..\..\..\Shared\Get-ExSetupFileVersionInfo.ps1
. $PSScriptRoot\..\..\..\..\Shared\Get-FileContentInformation.ps1
+. $PSScriptRoot\..\..\..\..\Shared\Get-MonitoringOverride.ps1
. $PSScriptRoot\IISInformation\Get-ExchangeAppPoolsInformation.ps1
. $PSScriptRoot\IISInformation\Get-ExchangeServerIISSettings.ps1
. $PSScriptRoot\Get-ExchangeAES256CBCDetails.ps1
@@ -211,6 +212,8 @@ function Get-ExchangeInformation {
}
$computerMembership = Invoke-ScriptBlockHandler @params
}
+
+ [array]$serverMonitoringOverride = Get-MonitoringOverride -Server $Server
} end {
Write-Verbose "Exiting: Get-ExchangeInformation"
@@ -236,6 +239,7 @@ function Get-ExchangeInformation {
AES256CBCInformation = $aes256CbcDetails
FileContentInformation = $fileContentInformation
ComputerMembership = $computerMembership
+ GetServerMonitoringOverride = $serverMonitoringOverride
}
}
}
diff --git a/Diagnostics/HealthChecker/DataCollection/OrganizationInformation/Get-OrganizationInformation.ps1 b/Diagnostics/HealthChecker/DataCollection/OrganizationInformation/Get-OrganizationInformation.ps1
index d987c9eb6c..7f2b4dfc27 100644
--- a/Diagnostics/HealthChecker/DataCollection/OrganizationInformation/Get-OrganizationInformation.ps1
+++ b/Diagnostics/HealthChecker/DataCollection/OrganizationInformation/Get-OrganizationInformation.ps1
@@ -7,6 +7,7 @@
. $PSScriptRoot\Get-SecurityCve-2021-34470.ps1
. $PSScriptRoot\Get-SecurityCve-2022-21978.ps1
. $PSScriptRoot\..\..\..\..\Shared\ActiveDirectoryFunctions\Get-ExchangeADSplitPermissionsEnabled.ps1
+. $PSScriptRoot\..\..\..\..\Shared\Get-MonitoringOverride.ps1
. $PSScriptRoot\..\..\..\..\Shared\ErrorMonitorFunctions.ps1
. $PSScriptRoot\..\..\..\..\Shared\Invoke-CatchActionErrorLoop.ps1
function Get-OrganizationInformation {
@@ -139,6 +140,8 @@ function Get-OrganizationInformation {
$getSettingOverride = "Unknown"
Invoke-CatchActions
}
+
+ [array]$globalMonitoringOverride = Get-MonitoringOverride
}
} end {
return [PSCustomObject]@{
@@ -156,6 +159,7 @@ function Get-OrganizationInformation {
GetSettingOverride = $getSettingOverride
GetDynamicDgPublicFolderMailboxes = $getDdgPublicFolders
GetIrmConfiguration = $getIrmConfiguration
+ GetGlobalMonitoringOverride = $globalMonitoringOverride
}
}
}
diff --git a/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetGlobalMonitoringOverride.xml b/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetGlobalMonitoringOverride.xml
new file mode 100644
index 0000000000..07f1e537b9
--- /dev/null
+++ b/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetGlobalMonitoringOverride.xml
@@ -0,0 +1,81 @@
+
+
+
+ Deserialized.Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+ Deserialized.Microsoft.Exchange.Data.ConfigurableObject
+ Deserialized.System.Object
+
+ Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+
+ Probe
+ Enabled
+ 0
+ FrontendTransport
+ OnPremisesInboundProxy
+
+ 10/9/2024 8:58:55 PM
+
+ Solo.com/Users/Han
+ 9/9/2024 8:58:55 PM
+ FrontendTransport\OnPremisesInboundProxy
+ true
+ New
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAGFNaWNyb3NvZnQuRXhjaGFuZ2UuTWFuYWdlbWVudCwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1DAMAAABbTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUBAAAAR01pY3Jvc29mdC5FeGNoYW5nZS5Nb25pdG9yaW5nLkFjdGl2ZU1vbml0b3JpbmcuTW9uaXRvcmluZ092ZXJyaWRlT2JqZWN0BAAAAAtwcm9wZXJ0eUJhZx5Db25maWd1cmFibGVPYmplY3QrcHJvcGVydHlCYWcsQ29uZmlndXJhYmxlT2JqZWN0K3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24mQ29uZmlndXJhYmxlT2JqZWN0K2luc3RhbnRpYXRpb25FcnJvcnMEBAMDMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAAMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAADlN5c3RlbS5WZXJzaW9uqQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlZhbGlkYXRpb25FcnJvciwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAgAAAAkEAAAACQQAAAAJBQAAAAoFBAAAADFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5QmFnBgAAABRQcm9wZXJ0eUJhZytyZWFkT25seRtQcm9wZXJ0eUJhZytzdG9yZVZhbHVlc09ubHknUHJvcGVydHlCYWcrdHJlYXRTd2l0Y2hhYmxlQXNWYWx1ZXNPbmx5JVByb3BlcnR5QmFnK3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24jUHJvcGVydHlCYWcrc2VyaWFsaXplZEN1cnJlbnRWYWx1ZXMkUHJvcGVydHlCYWcrc2VyaWFsaXplZE9yaWdpbmFsVmFsdWVzAAAAAwQEAQEBDlN5c3RlbS5WZXJzaW9uL01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5QmFnK1ZhbHVlUGFpcltdAwAAAC9NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXJbXQMAAAADAAAAAAAACQUAAAAJBgAAAAkHAAAABAUAAAAOU3lzdGVtLlZlcnNpb24EAAAABl9NYWpvcgZfTWlub3IGX0J1aWxkCV9SZXZpc2lvbgAAAAAICAgIDwAAAAAAAAAAAAAAAAAAAAcGAAAAAAEAAAALAAAABC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXIDAAAABfj///8tTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAgAAAANLZXkFVmFsdWUEAjhNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5RGVmaW5pdGlvbgMAAAADAAAACQkAAAAJCgAAAAH1////+P///wkMAAAACQ0AAAAB8v////j///8JDwAAAAkQAAAAAe/////4////CRIAAAAGEwAAAAVQcm9iZQHs////+P///wkVAAAABhYAAAAHRW5hYmxlZAHp////+P///wkYAAAABhkAAAABMAHm////+P///wkbAAAABhwAAAARRnJvbnRlbmRUcmFuc3BvcnQB4/////j///8JHgAAAAYfAAAAFk9uUHJlbWlzZXNJbmJvdW5kUHJveHkB4P////j///8JIQAAAAYiAAAAFDEwLzkvMjAyNCA4OjU4OjU1IFBNAd3////4////CSQAAAAGJQAAABJTb2xvLmNvbS9Vc2Vycy9IYW4B2v////j///8JJwAAAAYoAAAAEzkvOS8yMDI0IDg6NTg6NTUgUE0HBwAAAAABAAAACwAAAAQtTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAwAAAAHX////+P///wkPAAAACgHV////+P///wkSAAAACgHT////+P///wkVAAAACgHR////+P///wkYAAAACgHP////+P///wkbAAAACgHN////+P///wkeAAAACgHL////+P///wk2AAAACgHJ////+P///wkhAAAACgHH////+P///wk6AAAACgHF////+P///wkkAAAACgHD////+P///wknAAAACgUJAAAAOE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlEZWZpbml0aW9uBQAAAAVmbGFncxdQcm9wZXJ0eURlZmluaXRpb24rbmFtZRdQcm9wZXJ0eURlZmluaXRpb24rdHlwZRtQcm9wZXJ0eURlZmluaXRpb24rdHlwZU5hbWU5UHJvcGVydHlEZWZpbml0aW9uK3JlcXVpcmVkUHJvcGVydHlEZWZpbml0aW9uc1doZW5SZWFkaW5nAAEDAQMIH1N5c3RlbS5Vbml0eVNlcmlhbGl6YXRpb25Ib2xkZXKzAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uYDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5RGVmaW5pdGlvbiwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAwAAAAABAAAGPwAAAAtPYmplY3RTdGF0ZQlAAAAABkEAAACAAU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlLCBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1CgUKAAAAI01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlAQAAAAd2YWx1ZV9fAAgDAAAAAAAAAAEMAAAACQAAAAAAAAAGQgAAAA9FeGNoYW5nZVZlcnNpb24JQwAAAAZEAAAAigFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24sIE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUKBQ0AAAAtTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VPYmplY3RWZXJzaW9uAwAAAAVNYWpvcgVNaW5vcg1FeGNoYW5nZUJ1aWxkAAAEAgIlTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VCdWlsZAMAAAADAAAAABQFu////yVNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZUJ1aWxkBAAAAAVNYWpvcgVNaW5vcgVCdWlsZA1CdWlsZFJldmlzaW9uAAAAAAICDg4DAAAADwAAAAAAAQ8AAAAJAAAAAAAAAAZGAAAACElkZW50aXR5CUcAAAAGSAAAAH1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RJZCwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQoFEAAAAF5NaWNyb3NvZnQuRXhjaGFuZ2UuTW9uaXRvcmluZy5BY3RpdmVNb25pdG9yaW5nLk1vbml0b3JpbmdPdmVycmlkZU9iamVjdCtNb25pdG9yaW5nSXRlbUlkZW50aXR5AQAAAAhpZGVudGl0eQECAAAABkkAAAAoRnJvbnRlbmRUcmFuc3BvcnRcT25QcmVtaXNlc0luYm91bmRQcm94eQESAAAACQAAAAAAAAAGSgAAAAhJdGVtVHlwZQlLAAAABkwAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEVAAAACQAAAAAAAAAGTQAAAAxQcm9wZXJ0eU5hbWUJSwAAAAZPAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBGAAAAAkAAAAAAAAABlAAAAANUHJvcGVydHlWYWx1ZQlLAAAABlIAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEbAAAACQAAAAAAAAAGUwAAAA1IZWFsdGhTZXROYW1lCUsAAAAGVQAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKAR4AAAAJAAAAAAAAAAZWAAAAEk1vbml0b3JpbmdJdGVtTmFtZQlLAAAABlgAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEhAAAACQAAAAAAAAAGWQAAAA5FeHBpcmF0aW9uVGltZQlLAAAABlsAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEkAAAACQAAAAAAAAAGXAAAAAlDcmVhdGVkQnkJSwAAAAZeAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBJwAAAAkAAAAAAAAABl8AAAALQ3JlYXRlZFRpbWUJSwAAAAZhAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBNgAAAAkAAAAAAAAABmIAAAAOVGFyZ2V0UmVzb3VyY2UJSwAAAAZkAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBOgAAAAkAAAAAAAAABmUAAAAMQXBwbHlWZXJzaW9uCUsAAAAGZwAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBEAAAAAfU3lzdGVtLlVuaXR5U2VyaWFsaXphdGlvbkhvbGRlcgMAAAAERGF0YQlVbml0eVR5cGUMQXNzZW1ibHlOYW1lAQABCAZoAAAAI01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlBAAAAAZpAAAAW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUBQwAAAEAAAAAGagAAAC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24EAAAACWkAAAABRwAAAEAAAAAGbAAAACBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RJZAQAAAAJaQAAAAFLAAAAQAAAAAZuAAAADVN5c3RlbS5TdHJpbmcEAAAABm8AAABLbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5Cw==
+ solo-e19a.solo.com
+ 6f717724-bc29-4a09-a19f-5512f339b875
+ false
+
+
+
+
+ Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+
+ Responder
+ Enabled
+ 0
+ AD
+ ActiveDirectoryConnectivityConfigDCServerReboot
+
+ 9/29/2024 5:53:08 PM
+
+ Solo.com/Users/Han
+ 9/9/2024 5:53:08 PM
+ AD\ActiveDirectoryConnectivityConfigDCServerReboot
+ true
+ New
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAGFNaWNyb3NvZnQuRXhjaGFuZ2UuTWFuYWdlbWVudCwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1DAMAAABbTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUBAAAAR01pY3Jvc29mdC5FeGNoYW5nZS5Nb25pdG9yaW5nLkFjdGl2ZU1vbml0b3JpbmcuTW9uaXRvcmluZ092ZXJyaWRlT2JqZWN0BAAAAAtwcm9wZXJ0eUJhZx5Db25maWd1cmFibGVPYmplY3QrcHJvcGVydHlCYWcsQ29uZmlndXJhYmxlT2JqZWN0K3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24mQ29uZmlndXJhYmxlT2JqZWN0K2luc3RhbnRpYXRpb25FcnJvcnMEBAMDMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAAMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAADlN5c3RlbS5WZXJzaW9uqQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlZhbGlkYXRpb25FcnJvciwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAgAAAAkEAAAACQQAAAAJBQAAAAoFBAAAADFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5QmFnBgAAABRQcm9wZXJ0eUJhZytyZWFkT25seRtQcm9wZXJ0eUJhZytzdG9yZVZhbHVlc09ubHknUHJvcGVydHlCYWcrdHJlYXRTd2l0Y2hhYmxlQXNWYWx1ZXNPbmx5JVByb3BlcnR5QmFnK3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24jUHJvcGVydHlCYWcrc2VyaWFsaXplZEN1cnJlbnRWYWx1ZXMkUHJvcGVydHlCYWcrc2VyaWFsaXplZE9yaWdpbmFsVmFsdWVzAAAAAwQEAQEBDlN5c3RlbS5WZXJzaW9uL01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5QmFnK1ZhbHVlUGFpcltdAwAAAC9NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXJbXQMAAAADAAAAAAAACQUAAAAJBgAAAAkHAAAABAUAAAAOU3lzdGVtLlZlcnNpb24EAAAABl9NYWpvcgZfTWlub3IGX0J1aWxkCV9SZXZpc2lvbgAAAAAICAgIDwAAAAAAAAAAAAAAAAAAAAcGAAAAAAEAAAALAAAABC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXIDAAAABfj///8tTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAgAAAANLZXkFVmFsdWUEAjhNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5RGVmaW5pdGlvbgMAAAADAAAACQkAAAAJCgAAAAH1////+P///wkMAAAACQ0AAAAB8v////j///8JDwAAAAkQAAAAAe/////4////CRIAAAAGEwAAAAlSZXNwb25kZXIB7P////j///8JFQAAAAYWAAAAB0VuYWJsZWQB6f////j///8JGAAAAAYZAAAAATAB5v////j///8JGwAAAAYcAAAAAkFEAeP////4////CR4AAAAGHwAAAC9BY3RpdmVEaXJlY3RvcnlDb25uZWN0aXZpdHlDb25maWdEQ1NlcnZlclJlYm9vdAHg////+P///wkhAAAABiIAAAAUOS8yOS8yMDI0IDU6NTM6MDggUE0B3f////j///8JJAAAAAYlAAAAElNvbG8uY29tL1VzZXJzL0hhbgHa////+P///wknAAAABigAAAATOS85LzIwMjQgNTo1MzowOCBQTQcHAAAAAAEAAAALAAAABC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXIDAAAAAdf////4////CQ8AAAAKAdX////4////CRIAAAAKAdP////4////CRUAAAAKAdH////4////CRgAAAAKAc/////4////CRsAAAAKAc3////4////CR4AAAAKAcv////4////CTYAAAAKAcn////4////CSEAAAAKAcf////4////CToAAAAKAcX////4////CSQAAAAKAcP////4////CScAAAAKBQkAAAA4TWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuU2ltcGxlUHJvdmlkZXJQcm9wZXJ0eURlZmluaXRpb24FAAAABWZsYWdzF1Byb3BlcnR5RGVmaW5pdGlvbituYW1lF1Byb3BlcnR5RGVmaW5pdGlvbit0eXBlG1Byb3BlcnR5RGVmaW5pdGlvbit0eXBlTmFtZTlQcm9wZXJ0eURlZmluaXRpb24rcmVxdWlyZWRQcm9wZXJ0eURlZmluaXRpb25zV2hlblJlYWRpbmcAAQMBAwgfU3lzdGVtLlVuaXR5U2VyaWFsaXphdGlvbkhvbGRlcrMBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUNvbGxlY3Rpb25gMVtbTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlEZWZpbml0aW9uLCBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1XV0DAAAAAAEAAAY/AAAAC09iamVjdFN0YXRlCUAAAAAGQQAAAIABTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuT2JqZWN0U3RhdGUsIE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUKBQoAAAAjTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuT2JqZWN0U3RhdGUBAAAAB3ZhbHVlX18ACAMAAAAAAAAAAQwAAAAJAAAAAAAAAAZCAAAAD0V4Y2hhbmdlVmVyc2lvbglDAAAABkQAAACKAU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLkV4Y2hhbmdlT2JqZWN0VmVyc2lvbiwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQoFDQAAAC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24DAAAABU1ham9yBU1pbm9yDUV4Y2hhbmdlQnVpbGQAAAQCAiVNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZUJ1aWxkAwAAAAMAAAAAFAW7////JU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLkV4Y2hhbmdlQnVpbGQEAAAABU1ham9yBU1pbm9yBUJ1aWxkDUJ1aWxkUmV2aXNpb24AAAAAAgIODgMAAAAPAAAAAAABDwAAAAkAAAAAAAAABkYAAAAISWRlbnRpdHkJRwAAAAZIAAAAfU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdElkLCBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1CgUQAAAAXk1pY3Jvc29mdC5FeGNoYW5nZS5Nb25pdG9yaW5nLkFjdGl2ZU1vbml0b3JpbmcuTW9uaXRvcmluZ092ZXJyaWRlT2JqZWN0K01vbml0b3JpbmdJdGVtSWRlbnRpdHkBAAAACGlkZW50aXR5AQIAAAAGSQAAADJBRFxBY3RpdmVEaXJlY3RvcnlDb25uZWN0aXZpdHlDb25maWdEQ1NlcnZlclJlYm9vdAESAAAACQAAAAAAAAAGSgAAAAhJdGVtVHlwZQlLAAAABkwAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEVAAAACQAAAAAAAAAGTQAAAAxQcm9wZXJ0eU5hbWUJSwAAAAZPAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBGAAAAAkAAAAAAAAABlAAAAANUHJvcGVydHlWYWx1ZQlLAAAABlIAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEbAAAACQAAAAAAAAAGUwAAAA1IZWFsdGhTZXROYW1lCUsAAAAGVQAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKAR4AAAAJAAAAAAAAAAZWAAAAEk1vbml0b3JpbmdJdGVtTmFtZQlLAAAABlgAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEhAAAACQAAAAAAAAAGWQAAAA5FeHBpcmF0aW9uVGltZQlLAAAABlsAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEkAAAACQAAAAAAAAAGXAAAAAlDcmVhdGVkQnkJSwAAAAZeAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBJwAAAAkAAAAAAAAABl8AAAALQ3JlYXRlZFRpbWUJSwAAAAZhAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBNgAAAAkAAAAAAAAABmIAAAAOVGFyZ2V0UmVzb3VyY2UJSwAAAAZkAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBOgAAAAkAAAAAAAAABmUAAAAMQXBwbHlWZXJzaW9uCUsAAAAGZwAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBEAAAAAfU3lzdGVtLlVuaXR5U2VyaWFsaXphdGlvbkhvbGRlcgMAAAAERGF0YQlVbml0eVR5cGUMQXNzZW1ibHlOYW1lAQABCAZoAAAAI01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlBAAAAAZpAAAAW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUBQwAAAEAAAAAGagAAAC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24EAAAACWkAAAABRwAAAEAAAAAGbAAAACBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RJZAQAAAAJaQAAAAFLAAAAQAAAAAZuAAAADVN5c3RlbS5TdHJpbmcEAAAABm8AAABLbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5Cw==
+ solo-e19a.solo.com
+ 6f717724-bc29-4a09-a19f-5512f339b875
+ false
+
+
+
+
+ Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+
+ Responder
+ Enabled
+ 0
+ MailboxSpace
+ StorageLogicalDriveSpaceEscalate
+
+ 9/9/2025 9:00:36 PM
+ Version 15.2 (Build 1118.7)
+ Solo.com/Users/Han
+ 9/9/2024 9:00:36 PM
+ MailboxSpace\StorageLogicalDriveSpaceEscalate
+ true
+ New
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAGFNaWNyb3NvZnQuRXhjaGFuZ2UuTWFuYWdlbWVudCwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1DAMAAABbTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUBAAAAR01pY3Jvc29mdC5FeGNoYW5nZS5Nb25pdG9yaW5nLkFjdGl2ZU1vbml0b3JpbmcuTW9uaXRvcmluZ092ZXJyaWRlT2JqZWN0BAAAAAtwcm9wZXJ0eUJhZx5Db25maWd1cmFibGVPYmplY3QrcHJvcGVydHlCYWcsQ29uZmlndXJhYmxlT2JqZWN0K3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24mQ29uZmlndXJhYmxlT2JqZWN0K2luc3RhbnRpYXRpb25FcnJvcnMEBAMDMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAAMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAADlN5c3RlbS5WZXJzaW9uqQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlZhbGlkYXRpb25FcnJvciwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAgAAAAkEAAAACQQAAAAJBQAAAAoFBAAAADFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5QmFnBgAAABRQcm9wZXJ0eUJhZytyZWFkT25seRtQcm9wZXJ0eUJhZytzdG9yZVZhbHVlc09ubHknUHJvcGVydHlCYWcrdHJlYXRTd2l0Y2hhYmxlQXNWYWx1ZXNPbmx5JVByb3BlcnR5QmFnK3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24jUHJvcGVydHlCYWcrc2VyaWFsaXplZEN1cnJlbnRWYWx1ZXMkUHJvcGVydHlCYWcrc2VyaWFsaXplZE9yaWdpbmFsVmFsdWVzAAAAAwQEAQEBDlN5c3RlbS5WZXJzaW9uL01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5QmFnK1ZhbHVlUGFpcltdAwAAAC9NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXJbXQMAAAADAAAAAAAACQUAAAAJBgAAAAkHAAAABAUAAAAOU3lzdGVtLlZlcnNpb24EAAAABl9NYWpvcgZfTWlub3IGX0J1aWxkCV9SZXZpc2lvbgAAAAAICAgIDwAAAAAAAAAAAAAAAAAAAAcGAAAAAAEAAAAMAAAABC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXIDAAAABfj///8tTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAgAAAANLZXkFVmFsdWUEAjhNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5RGVmaW5pdGlvbgMAAAADAAAACQkAAAAJCgAAAAH1////+P///wkMAAAACQ0AAAAB8v////j///8JDwAAAAkQAAAAAe/////4////CRIAAAAGEwAAAAlSZXNwb25kZXIB7P////j///8JFQAAAAYWAAAAB0VuYWJsZWQB6f////j///8JGAAAAAYZAAAAATAB5v////j///8JGwAAAAYcAAAADE1haWxib3hTcGFjZQHj////+P///wkeAAAABh8AAAAgU3RvcmFnZUxvZ2ljYWxEcml2ZVNwYWNlRXNjYWxhdGUB4P////j///8JIQAAAAYiAAAAEzkvOS8yMDI1IDk6MDA6MzYgUE0B3f////j///8JJAAAAAYlAAAAG1ZlcnNpb24gMTUuMiAoQnVpbGQgMTExOC43KQHa////+P///wknAAAABigAAAASU29sby5jb20vVXNlcnMvSGFuAdf////4////CSoAAAAGKwAAABM5LzkvMjAyNCA5OjAwOjM2IFBNBwcAAAAAAQAAAAsAAAAELU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5QmFnK1ZhbHVlUGFpcgMAAAAB1P////j///8JDwAAAAoB0v////j///8JEgAAAAoB0P////j///8JFQAAAAoBzv////j///8JGAAAAAoBzP////j///8JGwAAAAoByv////j///8JHgAAAAoByP////j///8JOQAAAAoBxv////j///8JIQAAAAoBxP////j///8JJAAAAAoBwv////j///8JJwAAAAoBwP////j///8JKgAAAAoFCQAAADhNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5RGVmaW5pdGlvbgUAAAAFZmxhZ3MXUHJvcGVydHlEZWZpbml0aW9uK25hbWUXUHJvcGVydHlEZWZpbml0aW9uK3R5cGUbUHJvcGVydHlEZWZpbml0aW9uK3R5cGVOYW1lOVByb3BlcnR5RGVmaW5pdGlvbityZXF1aXJlZFByb3BlcnR5RGVmaW5pdGlvbnNXaGVuUmVhZGluZwABAwEDCB9TeXN0ZW0uVW5pdHlTZXJpYWxpemF0aW9uSG9sZGVyswFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JQ29sbGVjdGlvbmAxW1tNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eURlZmluaXRpb24sIE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzVdXQMAAAAAAQAABkIAAAALT2JqZWN0U3RhdGUJQwAAAAZEAAAAgAFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RTdGF0ZSwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQoFCgAAACNNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RTdGF0ZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAABDAAAAAkAAAAAAAAABkUAAAAPRXhjaGFuZ2VWZXJzaW9uCUYAAAAGRwAAAIoBTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VPYmplY3RWZXJzaW9uLCBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1CgUNAAAALU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLkV4Y2hhbmdlT2JqZWN0VmVyc2lvbgMAAAAFTWFqb3IFTWlub3INRXhjaGFuZ2VCdWlsZAAABAICJU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLkV4Y2hhbmdlQnVpbGQDAAAAAwAAAAAUBbj///8lTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VCdWlsZAQAAAAFTWFqb3IFTWlub3IFQnVpbGQNQnVpbGRSZXZpc2lvbgAAAAACAg4OAwAAAA8AAAAAAAEPAAAACQAAAAAAAAAGSQAAAAhJZGVudGl0eQlKAAAABksAAAB9TWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuT2JqZWN0SWQsIE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUKBRAAAABeTWljcm9zb2Z0LkV4Y2hhbmdlLk1vbml0b3JpbmcuQWN0aXZlTW9uaXRvcmluZy5Nb25pdG9yaW5nT3ZlcnJpZGVPYmplY3QrTW9uaXRvcmluZ0l0ZW1JZGVudGl0eQEAAAAIaWRlbnRpdHkBAgAAAAZMAAAALU1haWxib3hTcGFjZVxTdG9yYWdlTG9naWNhbERyaXZlU3BhY2VFc2NhbGF0ZQESAAAACQAAAAAAAAAGTQAAAAhJdGVtVHlwZQlOAAAABk8AAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEVAAAACQAAAAAAAAAGUAAAAAxQcm9wZXJ0eU5hbWUJTgAAAAZSAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBGAAAAAkAAAAAAAAABlMAAAANUHJvcGVydHlWYWx1ZQlOAAAABlUAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEbAAAACQAAAAAAAAAGVgAAAA1IZWFsdGhTZXROYW1lCU4AAAAGWAAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKAR4AAAAJAAAAAAAAAAZZAAAAEk1vbml0b3JpbmdJdGVtTmFtZQlOAAAABlsAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEhAAAACQAAAAAAAAAGXAAAAA5FeHBpcmF0aW9uVGltZQlOAAAABl4AAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEkAAAACQAAAAAAAAAGXwAAAAxBcHBseVZlcnNpb24JTgAAAAZhAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBJwAAAAkAAAAAAAAABmIAAAAJQ3JlYXRlZEJ5CU4AAAAGZAAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKASoAAAAJAAAAAAAAAAZlAAAAC0NyZWF0ZWRUaW1lCU4AAAAGZwAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKATkAAAAJAAAAAAAAAAZoAAAADlRhcmdldFJlc291cmNlCU4AAAAGagAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBEMAAAAfU3lzdGVtLlVuaXR5U2VyaWFsaXphdGlvbkhvbGRlcgMAAAAERGF0YQlVbml0eVR5cGUMQXNzZW1ibHlOYW1lAQABCAZrAAAAI01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlBAAAAAZsAAAAW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUBRgAAAEMAAAAGbQAAAC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24EAAAACWwAAAABSgAAAEMAAAAGbwAAACBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RJZAQAAAAJbAAAAAFOAAAAQwAAAAZxAAAADVN5c3RlbS5TdHJpbmcEAAAABnIAAABLbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5Cw==
+ solo-e19a.solo.com
+ 6f717724-bc29-4a09-a19f-5512f339b875
+ false
+
+
+
\ No newline at end of file
diff --git a/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetServerMonitoringOverride.xml b/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetServerMonitoringOverride.xml
new file mode 100644
index 0000000000..51c3b8ef70
--- /dev/null
+++ b/Diagnostics/HealthChecker/Tests/DataCollection/E19/Exchange/GetServerMonitoringOverride.xml
@@ -0,0 +1,31 @@
+
+
+
+ Deserialized.Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+ Deserialized.Microsoft.Exchange.Data.ConfigurableObject
+ Deserialized.System.Object
+
+ Microsoft.Exchange.Monitoring.ActiveMonitoring.MonitoringOverrideObject
+
+ Responder
+ Enabled
+ 0
+ AD
+ ActiveDirectoryConnectivityConfigDCServerReboot
+
+ 2024-09-29 17:40:49Z
+
+ Solo.com/Users/Han
+ 2024-09-09 17:40:49Z
+ AD\ActiveDirectoryConnectivityConfigDCServerReboot
+ true
+ New
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAGFNaWNyb3NvZnQuRXhjaGFuZ2UuTWFuYWdlbWVudCwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1DAMAAABbTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUBAAAAR01pY3Jvc29mdC5FeGNoYW5nZS5Nb25pdG9yaW5nLkFjdGl2ZU1vbml0b3JpbmcuTW9uaXRvcmluZ092ZXJyaWRlT2JqZWN0BAAAAAtwcm9wZXJ0eUJhZx5Db25maWd1cmFibGVPYmplY3QrcHJvcGVydHlCYWcsQ29uZmlndXJhYmxlT2JqZWN0K3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24mQ29uZmlndXJhYmxlT2JqZWN0K2luc3RhbnRpYXRpb25FcnJvcnMEBAMDMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAAMU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlCYWcDAAAADlN5c3RlbS5WZXJzaW9uqQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlZhbGlkYXRpb25FcnJvciwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAgAAAAkEAAAACQQAAAAJBQAAAAoFBAAAADFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5QmFnBgAAABRQcm9wZXJ0eUJhZytyZWFkT25seRtQcm9wZXJ0eUJhZytzdG9yZVZhbHVlc09ubHknUHJvcGVydHlCYWcrdHJlYXRTd2l0Y2hhYmxlQXNWYWx1ZXNPbmx5JVByb3BlcnR5QmFnK3NlcmlhbGl6ZXJBc3NlbWJseVZlcnNpb24jUHJvcGVydHlCYWcrc2VyaWFsaXplZEN1cnJlbnRWYWx1ZXMkUHJvcGVydHlCYWcrc2VyaWFsaXplZE9yaWdpbmFsVmFsdWVzAAAAAwQEAQEBDlN5c3RlbS5WZXJzaW9uL01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5QmFnK1ZhbHVlUGFpcltdAwAAAC9NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXJbXQMAAAADAAAAAAAACQUAAAAJBgAAAAkHAAAABAUAAAAOU3lzdGVtLlZlcnNpb24EAAAABl9NYWpvcgZfTWlub3IGX0J1aWxkCV9SZXZpc2lvbgAAAAAICAgIDwAAAAAAAAAAAAAAAAAAAAcGAAAAAAEAAAALAAAABC1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5Qcm9wZXJ0eUJhZytWYWx1ZVBhaXIDAAAABfj///8tTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAgAAAANLZXkFVmFsdWUEAjhNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5TaW1wbGVQcm92aWRlclByb3BlcnR5RGVmaW5pdGlvbgMAAAADAAAACQkAAAAJCgAAAAH1////+P///wkMAAAACQ0AAAAB8v////j///8JDwAAAAkQAAAAAe/////4////CRIAAAAGEwAAAAlSZXNwb25kZXIB7P////j///8JFQAAAAYWAAAAB0VuYWJsZWQB6f////j///8JGAAAAAYZAAAAATAB5v////j///8JGwAAAAYcAAAAAkFEAeP////4////CR4AAAAGHwAAAC9BY3RpdmVEaXJlY3RvcnlDb25uZWN0aXZpdHlDb25maWdEQ1NlcnZlclJlYm9vdAHg////+P///wkhAAAABiIAAAAUMjAyNC0wOS0yOSAxNzo0MDo0OVoB3f////j///8JJAAAAAYlAAAAElNvbG8uY29tL1VzZXJzL0hhbgHa////+P///wknAAAABigAAAAUMjAyNC0wOS0wOSAxNzo0MDo0OVoHBwAAAAABAAAACwAAAAQtTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuUHJvcGVydHlCYWcrVmFsdWVQYWlyAwAAAAHX////+P///wkPAAAACgHV////+P///wkSAAAACgHT////+P///wkVAAAACgHR////+P///wkYAAAACgHP////+P///wkbAAAACgHN////+P///wkeAAAACgHL////+P///wk2AAAACgHJ////+P///wkhAAAACgHH////+P///wk6AAAACgHF////+P///wkkAAAACgHD////+P///wknAAAACgUJAAAAOE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlNpbXBsZVByb3ZpZGVyUHJvcGVydHlEZWZpbml0aW9uBQAAAAVmbGFncxdQcm9wZXJ0eURlZmluaXRpb24rbmFtZRdQcm9wZXJ0eURlZmluaXRpb24rdHlwZRtQcm9wZXJ0eURlZmluaXRpb24rdHlwZU5hbWU5UHJvcGVydHlEZWZpbml0aW9uK3JlcXVpcmVkUHJvcGVydHlEZWZpbml0aW9uc1doZW5SZWFkaW5nAAEDAQMIH1N5c3RlbS5Vbml0eVNlcmlhbGl6YXRpb25Ib2xkZXKzAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uYDFbW01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLlByb3BlcnR5RGVmaW5pdGlvbiwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNV1dAwAAAAABAAAGPwAAAAtPYmplY3RTdGF0ZQlAAAAABkEAAACAAU1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlLCBNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1CgUKAAAAI01pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLk9iamVjdFN0YXRlAQAAAAd2YWx1ZV9fAAgDAAAAAAAAAAEMAAAACQAAAAAAAAAGQgAAAA9FeGNoYW5nZVZlcnNpb24JQwAAAAZEAAAAigFNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZU9iamVjdFZlcnNpb24sIE1pY3Jvc29mdC5FeGNoYW5nZS5EYXRhLCBWZXJzaW9uPTE1LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUKBQ0AAAAtTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VPYmplY3RWZXJzaW9uAwAAAAVNYWpvcgVNaW5vcg1FeGNoYW5nZUJ1aWxkAAAEAgIlTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VCdWlsZAMAAAADAAAAABQFu////yVNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5FeGNoYW5nZUJ1aWxkBAAAAAVNYWpvcgVNaW5vcgVCdWlsZA1CdWlsZFJldmlzaW9uAAAAAAICDg4DAAAADwAAAAAAAQ8AAAAJAAAAAAAAAAZGAAAACElkZW50aXR5CUcAAAAGSAAAAH1NaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RJZCwgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQoFEAAAAF5NaWNyb3NvZnQuRXhjaGFuZ2UuTW9uaXRvcmluZy5BY3RpdmVNb25pdG9yaW5nLk1vbml0b3JpbmdPdmVycmlkZU9iamVjdCtNb25pdG9yaW5nSXRlbUlkZW50aXR5AQAAAAhpZGVudGl0eQECAAAABkkAAAAyQURcQWN0aXZlRGlyZWN0b3J5Q29ubmVjdGl2aXR5Q29uZmlnRENTZXJ2ZXJSZWJvb3QBEgAAAAkAAAAAAAAABkoAAAAISXRlbVR5cGUJSwAAAAZMAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBFQAAAAkAAAAAAAAABk0AAAAMUHJvcGVydHlOYW1lCUsAAAAGTwAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKARgAAAAJAAAAAAAAAAZQAAAADVByb3BlcnR5VmFsdWUJSwAAAAZSAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBGwAAAAkAAAAAAAAABlMAAAANSGVhbHRoU2V0TmFtZQlLAAAABlUAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgEeAAAACQAAAAAAAAAGVgAAABJNb25pdG9yaW5nSXRlbU5hbWUJSwAAAAZYAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBIQAAAAkAAAAAAAAABlkAAAAORXhwaXJhdGlvblRpbWUJSwAAAAZbAAAAWlN5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQoBJAAAAAkAAAAAAAAABlwAAAAJQ3JlYXRlZEJ5CUsAAAAGXgAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKAScAAAAJAAAAAAAAAAZfAAAAC0NyZWF0ZWRUaW1lCUsAAAAGYQAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKATYAAAAJAAAAAAAAAAZiAAAADlRhcmdldFJlc291cmNlCUsAAAAGZAAAAFpTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKAToAAAAJAAAAAAAAAAZlAAAADEFwcGx5VmVyc2lvbglLAAAABmcAAABaU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5CgRAAAAAH1N5c3RlbS5Vbml0eVNlcmlhbGl6YXRpb25Ib2xkZXIDAAAABERhdGEJVW5pdHlUeXBlDEFzc2VtYmx5TmFtZQEAAQgGaAAAACNNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YS5PYmplY3RTdGF0ZQQAAAAGaQAAAFtNaWNyb3NvZnQuRXhjaGFuZ2UuRGF0YSwgVmVyc2lvbj0xNS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1AUMAAABAAAAABmoAAAAtTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuRXhjaGFuZ2VPYmplY3RWZXJzaW9uBAAAAAlpAAAAAUcAAABAAAAABmwAAAAgTWljcm9zb2Z0LkV4Y2hhbmdlLkRhdGEuT2JqZWN0SWQEAAAACWkAAAABSwAAAEAAAAAGbgAAAA1TeXN0ZW0uU3RyaW5nBAAAAAZvAAAAS21zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQs=
+ solo-e19a.solo.com
+ 6f717724-bc29-4a09-a19f-5512f339b875
+ false
+
+
+
\ No newline at end of file
diff --git a/Diagnostics/HealthChecker/Tests/HealthChecker.E15.Main.Tests.ps1 b/Diagnostics/HealthChecker/Tests/HealthChecker.E15.Main.Tests.ps1
index 9a809cd3e6..50c6043ba8 100644
--- a/Diagnostics/HealthChecker/Tests/HealthChecker.E15.Main.Tests.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthChecker.E15.Main.Tests.ps1
@@ -32,7 +32,7 @@ Describe "Testing Health Checker by Mock Data Imports - Exchange 2013" {
TestObjectMatch "Internet Web Proxy" "Not Set"
TestObjectMatch "Extended Protection Enabled (Any VDir)" $false
TestObjectMatch "Setting Overrides Detected" $false
- $Script:ActiveGrouping.Count | Should -Be 17
+ $Script:ActiveGrouping.Count | Should -Be 18
}
It "Display Results - Organization Information" {
diff --git a/Diagnostics/HealthChecker/Tests/HealthChecker.E16.Main.Tests.ps1 b/Diagnostics/HealthChecker/Tests/HealthChecker.E16.Main.Tests.ps1
index 06c167aa13..ee362c9f71 100644
--- a/Diagnostics/HealthChecker/Tests/HealthChecker.E16.Main.Tests.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthChecker.E16.Main.Tests.ps1
@@ -33,7 +33,7 @@ Describe "Testing Health Checker by Mock Data Imports - Exchange 2016" {
TestObjectMatch "Extended Protection Enabled (Any VDir)" $false
TestObjectMatch "Setting Overrides Detected" $false
TestObjectMatch "Exchange Server Membership" "Passed"
- $Script:ActiveGrouping.Count | Should -Be 15
+ $Script:ActiveGrouping.Count | Should -Be 16
}
It "Display Results - Organization Information" {
diff --git a/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Main.Tests.ps1 b/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Main.Tests.ps1
index a46a293113..228af158ba 100644
--- a/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Main.Tests.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Main.Tests.ps1
@@ -31,9 +31,10 @@ Describe "Testing Health Checker by Mock Data Imports" {
TestObjectMatch "Internet Web Proxy" "Not Set"
TestObjectMatch "Extended Protection Enabled (Any VDir)" $false
TestObjectMatch "Setting Overrides Detected" $false
+ TestObjectMatch "Monitoring Overrides Detected" $false
TestObjectMatch "Out of Date" $true -WriteType "Red"
TestObjectMatch "Exchange Server Membership" "Passed"
- $Script:ActiveGrouping.Count | Should -Be 15
+ $Script:ActiveGrouping.Count | Should -Be 16
}
It "Display Results - Organization Information" {
diff --git a/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Scenarios.Tests.ps1 b/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Scenarios.Tests.ps1
index 39f4c32452..198ff3ec5d 100644
--- a/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Scenarios.Tests.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthChecker.E19.Scenarios.Tests.ps1
@@ -52,6 +52,8 @@ Describe "Testing Health Checker by Mock Data Imports" {
Mock Get-LocalGroupMember { return Import-Clixml "$Script:MockDataCollectionRoot\Exchange\GetLocalGroupMember2.xml" }
Mock Get-WindowsFeature { return Import-Clixml "$Script:MockDataCollectionRoot\OS\GetWindowsFeature1.xml" }
Mock Get-SmbServerConfiguration { return Import-Clixml "$Script:MockDataCollectionRoot\OS\GetSmbServerConfiguration1.xml" }
+ Mock Get-GlobalMonitoringOverride { return Import-Clixml "$Script:MockDataCollectionRoot\Exchange\GetGlobalMonitoringOverride.xml" }
+ Mock Get-ServerMonitoringOverride { return Import-Clixml "$Script:MockDataCollectionRoot\Exchange\GetServerMonitoringOverride.xml" }
Mock Get-WinEvent -ParameterFilter { $LogName -eq "Application" -and $Oldest -eq $true -and $MaxEvents -eq 1 } -MockWith {
$r = Import-Clixml "$Script:MockDataCollectionRoot\OS\GetWinEventOldestApplication.xml"
$r.TimeCreated = ((Get-Date).AddDays(-1))
@@ -121,6 +123,7 @@ Describe "Testing Health Checker by Mock Data Imports" {
TestObjectMatch "Exchange Server Membership" "Failed" -WriteType "Red"
TestObjectMatch "Exchange Trusted Subsystem - Local System Membership" "Exchange Trusted Subsystem - Local System Membership" -WriteType "Red"
TestObjectMatch "Exchange Trusted Subsystem - AD Group Membership" "Exchange Trusted Subsystem - AD Group Membership" -WriteType "Red"
+ TestObjectMatch "Monitoring Overrides Detected" $true
$hotfixInstalled = GetObject "Exchange IU"
$hotfixInstalled.Count | Should -Be 2
}
diff --git a/Diagnostics/HealthChecker/Tests/HealthChecker.MockedCalls.Tests.ps1 b/Diagnostics/HealthChecker/Tests/HealthChecker.MockedCalls.Tests.ps1
index 63ead49718..1e7e940c24 100644
--- a/Diagnostics/HealthChecker/Tests/HealthChecker.MockedCalls.Tests.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthChecker.MockedCalls.Tests.ps1
@@ -49,6 +49,8 @@ Describe "Testing Health Checker by Mock Data Imports" {
Mock Get-OutlookAnywhere { return $null }
Mock Get-PowerShellVirtualDirectory { return $null }
Mock Get-WindowsFeature { return Import-Clixml "$Script:MockDataCollectionRoot\OS\GetWindowsFeature.xml" }
+ Mock Get-GlobalMonitoringOverride { return $null }
+ Mock Get-ServerMonitoringOverride { return $null }
$Error.Clear()
Get-OrganizationInformation -EdgeServer $false | Out-Null
@@ -106,6 +108,8 @@ Describe "Testing Health Checker by Mock Data Imports" {
Assert-MockCalled Get-OutlookAnywhere -Exactly 1
Assert-MockCalled Get-PowerShellVirtualDirectory -Exactly 1
Assert-MockCalled Get-WindowsFeature -Exactly 1
+ Assert-MockCalled Get-GlobalMonitoringOverride -Exactly 1
+ Assert-MockCalled Get-ServerMonitoringOverride -Exactly 1
}
}
}
diff --git a/Diagnostics/HealthChecker/Tests/HealthCheckerTest.CommonMocks.NotPublished.ps1 b/Diagnostics/HealthChecker/Tests/HealthCheckerTest.CommonMocks.NotPublished.ps1
index cbcfa13eca..f1f48412b8 100644
--- a/Diagnostics/HealthChecker/Tests/HealthCheckerTest.CommonMocks.NotPublished.ps1
+++ b/Diagnostics/HealthChecker/Tests/HealthCheckerTest.CommonMocks.NotPublished.ps1
@@ -379,3 +379,11 @@ function Get-ExchangeWebSitesFromAd {
function Get-WindowsFeature {
return Import-Clixml "$Script:MockDataCollectionRoot\OS\GetWindowsFeature.xml"
}
+
+function Get-GlobalMonitoringOverride {
+ return $null
+}
+
+function Get-ServerMonitoringOverride {
+ return $null
+}
diff --git a/PublicFolders/SourceSideValidations/SourceSideValidations.ps1 b/PublicFolders/SourceSideValidations/SourceSideValidations.ps1
index 6cd3ff45de..ee205398f1 100644
--- a/PublicFolders/SourceSideValidations/SourceSideValidations.ps1
+++ b/PublicFolders/SourceSideValidations/SourceSideValidations.ps1
@@ -44,6 +44,7 @@ param (
. $PSScriptRoot\JobQueue.ps1
. $PSScriptRoot\..\..\Shared\ScriptUpdateFunctions\Test-ScriptVersion.ps1
. $PSScriptRoot\..\..\Shared\Out-Columns.ps1
+. $PSScriptRoot\..\..\Shared\Confirm-ExchangeShell.ps1
# For HashSet support
Add-Type -AssemblyName System.Core -ErrorAction Stop
@@ -92,6 +93,15 @@ try {
}
if ($RemoveInvalidPermissions) {
+ $shell = Confirm-ExchangeShell
+
+ if (-not $shell.EMS) {
+ Write-Host "The -RemoveInvalidPermissions switch must be used from Exchange Management Shell. If you are using EMS,"
+ Write-Host "then there may be an issue with the Auth Certificate or some other issue preventing PowerShell serialization."
+ Write-Host "Cannot continue."
+ return
+ }
+
if (-not (Test-Path $ResultsFile)) {
Write-Error "File not found: $ResultsFile. Please specify -ResultsFile or run without -RemoveInvalidPermissions to generate a results file."
} else {
diff --git a/PublicFolders/SourceSideValidations/Tests/Permission/Remove-InvalidPermission.ps1 b/PublicFolders/SourceSideValidations/Tests/Permission/Remove-InvalidPermission.ps1
index 7b1b59f144..ac4edcfde4 100644
--- a/PublicFolders/SourceSideValidations/Tests/Permission/Remove-InvalidPermission.ps1
+++ b/PublicFolders/SourceSideValidations/Tests/Permission/Remove-InvalidPermission.ps1
@@ -48,7 +48,7 @@ function Remove-InvalidPermission {
) {
if ($PSCmdlet.ShouldProcess("$($result.FolderIdentity)", "Remove $($perm.User.DisplayName)")) {
Write-Host "Removing $($perm.User.DisplayName) from folder $($result.FolderIdentity)"
- Remove-PublicFolderClientPermission $result.FolderEntryId -User $perm.User.DisplayName -Confirm:$false
+ $perm | Remove-PublicFolderClientPermission -Confirm:$false
}
}
}
diff --git a/Setup/SetupAssist/Checks/Domain/Test-ValidHomeMdb.ps1 b/Setup/SetupAssist/Checks/Domain/Test-ValidHomeMdb.ps1
deleted file mode 100644
index fe601ec2a7..0000000000
--- a/Setup/SetupAssist/Checks/Domain/Test-ValidHomeMdb.ps1
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-. $PSScriptRoot\..\New-TestResult.ps1
-. $PSScriptRoot\..\..\..\..\Shared\ActiveDirectoryFunctions\Search-AllActiveDirectoryDomains.ps1
-
-function Test-ValidHomeMDB {
- $testName = "Valid Home MDB"
- $arbitration = 0x800000
- $discovery = 0x20000000
- $publicFolder = 0x1000000000
- $recipientTypes = $arbitration -bor $discovery -bor $publicFolder
- $filter = "(&(objectClass=user)(mailNickname=*)(msExchRecipientTypeDetails:1.2.840.113556.1.4.804:=$recipientTypes))"
- $propsToLoad = @("distinguishedName", "homeMDB")
-
- $results = Search-AllActiveDirectoryDomains -Filter $filter -PropertiesToLoad $propsToLoad
-
- if ($null -ne $results -and
- $results.Count -gt 0) {
-
- foreach ($result in $results) {
- $dbName = $result.Properties["homeMDB"]
- $params = @{
- TestName = $testName
- Details = ("Mailbox DN: $($result.Properties["distinguishedName"])`n" +
- "Database DN: $dbName")
- ReferenceInfo = ("Run the following command in EMS.`n" +
- "If EMS is down, launch PowerShell and run `"Add-PSSnapin *Exchange*`"`n" +
- " Set-Mailbox 'DN' -Database 'DB_Name'")
- }
-
- if ((-not([string]::IsNullOrEmpty($dbName))) -and
- ([ADSI]::Exists("LDAP://$dbName"))) {
- New-TestResult @params -Result "Passed"
- } else {
- New-TestResult @params -Result "Failed"
- }
- }
- } else {
- New-TestResult -TestName $testName -Result "Failed" -Details "Failed to find any critical mailboxes"
- }
-}
diff --git a/Setup/SetupAssist/Checks/Domain/Test-ValidMailboxProperties.ps1 b/Setup/SetupAssist/Checks/Domain/Test-ValidMailboxProperties.ps1
new file mode 100644
index 0000000000..08b05aa232
--- /dev/null
+++ b/Setup/SetupAssist/Checks/Domain/Test-ValidMailboxProperties.ps1
@@ -0,0 +1,63 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+. $PSScriptRoot\..\New-TestResult.ps1
+. $PSScriptRoot\..\..\..\..\Shared\ActiveDirectoryFunctions\Search-AllActiveDirectoryDomains.ps1
+
+function Test-ValidMailboxProperties {
+ $validHomeMdbTestName = "Valid Home MDB" # Need to make sure the property value homeMDB is not null and points to a valid database object.
+ $validHomeServerTestName = "Valid Home Server Name" # Need to make sure the property value msExchHomeServerName is not null.
+ $arbitration = 0x800000
+ $discovery = 0x20000000
+ $publicFolder = 0x1000000000
+ $recipientTypes = $arbitration -bor $discovery -bor $publicFolder
+ $filter = "(&(objectClass=user)(mailNickname=*)(msExchRecipientTypeDetails:1.2.840.113556.1.4.804:=$recipientTypes))"
+ $propsToLoad = @("distinguishedName", "homeMDB", "msExchHomeServerName")
+
+ $results = Search-AllActiveDirectoryDomains -Filter $filter -PropertiesToLoad $propsToLoad
+
+ if ($null -ne $results -and
+ $results.Count -gt 0) {
+
+ foreach ($result in $results) {
+ $dbName = $result.Properties["homeMDB"]
+ $mailboxDN = $result.Properties["distinguishedName"]
+ $params = @{
+ TestName = $validHomeMdbTestName
+ Details = ("Mailbox DN: $mailboxDN`n" +
+ "Database DN: $dbName")
+ ReferenceInfo = ("Run the following command in EMS.`n" +
+ "If EMS is down, launch PowerShell and run `"Add-PSSnapin *Exchange*`"`n" +
+ " Set-Mailbox 'DN' -Database 'DB_Name'")
+ }
+
+ if ((-not([string]::IsNullOrEmpty($dbName))) -and
+ ([ADSI]::Exists("LDAP://$dbName"))) {
+ New-TestResult @params -Result "Passed"
+ } else {
+ New-TestResult @params -Result "Failed"
+ }
+
+ $homeServer = $result.Properties["msExchHomeServerName"]
+ $params = @{
+ TestName = $validHomeServerTestName
+ Details = ("Mailbox DN: $mailboxDN`nHome Server Name: $homeServer")
+ ReferenceInfo = ("Run the following command in PowerShell or EMS.`n" +
+ "Set-ADObject 'DN' -Add @{msExchHomeServerName='AnExchangeServer-ExchangeLegacyDN-Value'}")
+ }
+
+ if ((-not([string]::IsNullOrEmpty($homeServer)))) {
+ New-TestResult @params -Result "Passed"
+ } else {
+ New-TestResult @params -Result "Failed"
+ }
+ }
+ } else {
+ $params = @{
+ Result = "Failed"
+ Details = "Failed to find any critical mailboxes"
+ }
+ New-TestResult @params -TestName $validHomeMdbTestName
+ New-TestResult @params -TestName $validHomeServerTestName
+ }
+}
diff --git a/Setup/SetupAssist/SetupAssist.ps1 b/Setup/SetupAssist/SetupAssist.ps1
index 9bef82dcd1..70b0397f71 100644
--- a/Setup/SetupAssist/SetupAssist.ps1
+++ b/Setup/SetupAssist/SetupAssist.ps1
@@ -16,7 +16,7 @@ param(
. $PSScriptRoot\Checks\Domain\Test-DomainMultiActiveSyncVirtualDirectories.ps1
. $PSScriptRoot\Checks\Domain\Test-ExchangeADSetupLevel.ps1
. $PSScriptRoot\Checks\Domain\Test-DomainOtherWellKnownObjects.ps1
-. $PSScriptRoot\Checks\Domain\Test-ValidHomeMdb.ps1
+. $PSScriptRoot\Checks\Domain\Test-ValidMailboxProperties.ps1
. $PSScriptRoot\Checks\LocalServer\Test-ExecutionPolicy.ps1
. $PSScriptRoot\Checks\LocalServer\Test-ExchangeServices.ps1
. $PSScriptRoot\Checks\LocalServer\Test-InstallWatermark.ps1
@@ -56,7 +56,7 @@ function RunAllTests {
"Test-PrerequisiteInstalled",
"Test-DomainOtherWellKnownObjects",
"Test-PendingReboot",
- "Test-ValidHomeMDB",
+ "Test-ValidMailboxProperties",
"Test-VirtualDirectoryConfiguration")
foreach ($test in $tests) {
diff --git a/Shared/Get-MonitoringOverride.ps1 b/Shared/Get-MonitoringOverride.ps1
new file mode 100644
index 0000000000..8f5c7fd6c4
--- /dev/null
+++ b/Shared/Get-MonitoringOverride.ps1
@@ -0,0 +1,64 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+function Get-MonitoringOverride {
+ [CmdletBinding()]
+ [OutputType([System.Collections.Generic.List[object]])]
+ param(
+ # If Server is provided, then we are doing Get-ServerMonitoringOverride. Otherwise, we are doing Get-GlobalMonitoringOverride.
+ [Parameter(Mandatory = $false)]
+ [string]$Server,
+
+ [Parameter(Mandatory = $false)]
+ [ScriptBlock]$CatchActionFunction
+ )
+ process {
+ try {
+ $monitoringOverrides = New-Object System.Collections.Generic.List[object]
+ $monitoringOverridesSimple = New-Object System.Collections.Generic.List[object]
+ $globalMonitoringOverride = [string]::IsNullOrEmpty($Server)
+ if ($globalMonitoringOverride) {
+ $monitoringOverride = Get-GlobalMonitoringOverride -ErrorAction Stop
+ } else {
+ $monitoringOverride = Get-ServerMonitoringOverride -Server $Server -ErrorAction Stop
+ }
+
+ foreach ($override in $monitoringOverride) {
+ $monitoringOverrides.Add([PSCustomObject]@{
+ ItemType = $override.ItemType
+ PropertyName = $override.PropertyName
+ PropertyValue = $override.PropertyValue
+ HealthSetName = $override.MonitoringItemName
+ TargetResource = $override.TargetResource
+ ExpirationTime = $override.ExpirationTime
+ ApplyVersion = $override.ApplyVersion
+ CreatedBy = $override.CreatedBy
+ CreatedTime = $override.CreatedTime
+ Identity = $override.Identity
+ IsValid = $override.IsValid
+ })
+ $monitoringOverridesSimple.Add([PSCustomObject]@{
+ Identity = $override.Identity
+ ItemType = $override.ItemType
+ PropertyName = $override.PropertyName
+ PropertyValue = $override.PropertyValue
+ ApplyVersion = $override.ApplyVersion
+ IsValid = $override.IsValid
+ IsGlobal = $globalMonitoringOverride
+ ExpirationTime = $override.ExpirationTime
+ })
+ }
+ return [PSCustomObject]@{
+ MonitoringOverrides = $monitoringOverrides
+ SimpleView = $monitoringOverridesSimple
+ }
+ } catch {
+
+ Write-Verbose "Failed to get the monitoring override. Inner Exception $_"
+
+ if ($null -ne $CatchActionFunction) {
+ & $CatchActionFunction
+ }
+ }
+ }
+}
diff --git a/Shared/ScriptUpdateFunctions/Invoke-ScriptUpdate.ps1 b/Shared/ScriptUpdateFunctions/Invoke-ScriptUpdate.ps1
index 12680975b5..9d5c0fce5d 100644
--- a/Shared/ScriptUpdateFunctions/Invoke-ScriptUpdate.ps1
+++ b/Shared/ScriptUpdateFunctions/Invoke-ScriptUpdate.ps1
@@ -28,7 +28,7 @@ function Invoke-ScriptUpdate {
$oldName = [IO.Path]::GetFileNameWithoutExtension($scriptName) + ".old"
$oldFullName = (Join-Path $scriptPath $oldName)
- $tempFullName = (Join-Path $env:TEMP $scriptName)
+ $tempFullName = (Join-Path ((Get-Item $env:TEMP).FullName) $scriptName)
if ($PSCmdlet.ShouldProcess("$scriptName", "Update script to latest version")) {
try {
diff --git a/docs/Diagnostics/ExchangeLogCollector.md b/docs/Diagnostics/ExchangeLogCollector.md
index 2e4c8682d8..4d5022d1af 100644
--- a/docs/Diagnostics/ExchangeLogCollector.md
+++ b/docs/Diagnostics/ExchangeLogCollector.md
@@ -70,10 +70,12 @@ AppSysLogs | Collects the Windows Event Application, System, and MSExchange Mana
AppSysLogsToXml | Collects the Windows Event Application and System and saves them out to XML. The time range only is from the time the script run and the value set on `LogAge`. Default value: `$true`
AutoDLogs | Enable to collect AutoDiscover Logs. Location: `V15\Logging\Autodiscover` and `V15\Logging\HttpProxy\Autodiscover`
CollectFailoverMetrics | Enable to run the `CollectOverMetrics.ps1` script against the DAG. Only able to be run on an Exchange tools box or an Exchange Server.
+ConversationLogs | Enable to collect the Conversation Logs. Location: `V15\Logging\ConversationAggregationLog` and `V15\Logging\ConversationProcessingLog`
DAGInformation | Enable to collect the DAG Information from all different DAGs that are in the list of servers.
DailyPerformanceLogs | Enable to collect Daily Performance Logs. Default Location: `V15\Logging\Diagnostics\DailyPerformanceLogs`
EASLogs | Enable to collect Exchange Active Sync Logging. Location: `V15\Logging\HttpProxy\Eas`
ECPLogs | Enable to collect ECP Logs. Location: `V15\Logging\ECP` and `V15\Logging\HttpProxy\Ecp`
+EventBasedAssistantsLogs | Enable to collect Event Based Assistants Logs. Location: `V15\Logging\EventBasedAssistants` and `V15\Logging\EventBasedAssistantsCollection`
EWSLogs | Enable to collect EWS Logs. Location: `V15\Logging\HttpProxy\Ews` and `V15\Logging\Ews`
ExchangeServerInformation | Enable to collect Exchange Information like Get-ExchangeServer, Get-MailboxServer, etc... This is also collected when `-ServerInformation` is also enabled.
ExMon | Enable to collect ExMon data from the server.
diff --git a/docs/Emerging-Issues.md b/docs/Emerging-Issues.md
index b105f2cd02..0c17dd48e6 100644
--- a/docs/Emerging-Issues.md
+++ b/docs/Emerging-Issues.md
@@ -9,7 +9,7 @@ This page lists emerging issues for Exchange On-Premises deployments, possible r
|**Updated on**|**Update causing the issue**|**Issue**|**Workaround/Solution**|
|-|-|-|-|
-| 8/23/2024 | [August 2024 update for Windows](https://support.microsoft.com/kb/5041578) | After installing the [August 2024 update for Windows](https://support.microsoft.com/kb/5041578), MS Exchange Transport service may start crashing | Please follow steps in [this KB](https://learn.microsoft.com/windows/release-health/status-windows-10-1809-and-windows-server-2019#3375msgdesc) |
+| 9/11/2024 | [August 2024 update for Windows](https://support.microsoft.com/kb/5041578) | After installing the [August 2024 update for Windows](https://support.microsoft.com/kb/5041578)
1) Microsoft Exchange Transport service may start crashing
2) Microsoft Filtering Management Service may not start or start with long delay | **Update on 9/11/2024**
Install [Windows Update for September 2024](https://support.microsoft.com/topic/september-10-2024-kb5043050-os-build-17763-6293-66e9809a-1838-4474-a6a7-90d64f042f00) or later
**Old information**
Please follow steps in [this KB](https://learn.microsoft.com/windows/release-health/status-windows-10-1809-and-windows-server-2019#3375msgdesc) |
| 4/23/2024 | [March 2024 Security Update for Exchange 2019,2016](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2024-exchange-server-security-updates/ba-p/4075348) | After installing the [March 2024 Security Update]((https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2024-exchange-server-security-updates/ba-p/4075348)), Search in Outlook (cached mode) may show "We're having trouble fetching results from the server...". The search works fine in OWA or Outlook online mode. | Please install [April 2024 Hotfix Update](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-april-2024-exchange-server-hotfix-updates/ba-p/4120536) |
| 4/23/2024 | [March 2024 Security Update for Exchange 2019,2016](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2024-exchange-server-security-updates/ba-p/4075348) | After installing the Security Update, add-ins may stop working with following error
"Add-in Error Something went wrong and we couldn't start this add-in. Please try again later or contact your system administrator | Please install [April 2024 Hotfix Update](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-april-2024-exchange-server-hotfix-updates/ba-p/4120536) |
| 4/23/2024 | [March 2024 Security Update for Exchange 2019,2016](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-march-2024-exchange-server-security-updates/ba-p/4075348) |After installing the March 2024 Security Update, Unread envelope icon is not getting updated after applying March 2024 SU | Please install [April 2024 Hotfix Update](https://techcommunity.microsoft.com/t5/exchange-team-blog/released-april-2024-exchange-server-hotfix-updates/ba-p/4120536) |