Skip to content

Commit

Permalink
Merge pull request #1963 from microsoft/main
Browse files Browse the repository at this point in the history
Release 1-29-24
  • Loading branch information
dpaulson45 authored Jan 29, 2024
2 parents 05f9e04 + c4e220f commit 12b67b1
Show file tree
Hide file tree
Showing 33 changed files with 1,107 additions and 200 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ on:
push:
branches: #
- main
permissions:
pages: write
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion Diagnostics/ExTRA/Scenarios/Search.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ ManagedStore.AdminInterface:MultiMailboxSearch
ManagedStore.FullTextIndex:FullTextIndex
ManagedStore.LogicalDataModel:SearchFolderAgeOut,SearchFolderPopulation,SearchFolderSearchCriteria
ManagedStore.MultiMailboxSearch:FaultInjection,FullTextIndex,Search
ManagedStore.StoreCommonServices:FullTextIndex
ManagedStore.StoreCommonServices:FullTextIndex,QueryPlannerDetail,QueryPlannerSummary
FilteredTracing:No
InMemoryTracing:No
Original file line number Diff line number Diff line change
Expand Up @@ -139,22 +139,80 @@ function Invoke-AnalyzerFrequentConfigurationIssues {
if ($null -ne $exchangeInformation.ApplicationConfigFileStatus -and
$exchangeInformation.ApplicationConfigFileStatus.Count -ge 1) {

foreach ($configKey in $exchangeInformation.ApplicationConfigFileStatus.Keys) {
# Only need to display a particular list all the time. Don't need every config that we want to possibly look at for issues.
$alwaysDisplayConfigs = @("EdgeTransport.exe.config")
$keyList = $exchangeInformation.ApplicationConfigFileStatus.Keys | Sort-Object

foreach ($configKey in $keyList) {

$configStatus = $exchangeInformation.ApplicationConfigFileStatus[$configKey]
$writeType = "Green"
$writeValue = $configStatus.Present
[string]$writeValue = $configStatus.Present

if (!$configStatus.Present) {
if (-not $configStatus.Present) {
$writeType = "Red"
$writeValue = "{0} --- Error" -f $writeValue
$writeValue += " --- Error"
}

$params = $baseParams + @{
Name = "$configKey Present"
Details = $writeValue
DisplayWriteType = $writeType
}
Add-AnalyzedResultInformation @params

if ($alwaysDisplayConfigs -contains $configKey -or
-not $configStatus.Present) {
Add-AnalyzedResultInformation @params
}

# if not a valid configuration file, provide that.
try {
if ($configStatus.Present) {
$content = [xml]($configStatus.Content)

# Additional checks of configuration files.
if ($configKey -eq "noderunner.exe.config") {
$memoryLimitMegabytes = $content.configuration.nodeRunnerSettings.memoryLimitMegabytes
$writeValue = "$memoryLimitMegabytes MB"
$writeType = "Green"

if ($null -eq $memoryLimitMegabytes) {
$writeType = "Yellow"
$writeValue = "Unconfigured. This may cause problems."
} elseif ($memoryLimitMegabytes -ne 0) {
$writeType = "Yellow"
$writeValue = "$memoryLimitMegabytes MB will limit the performance of search and can be more impactful than helpful if not configured correctly for your environment."
}

$params = $baseParams + @{
Name = "NodeRunner.exe memory limit"
Details = $writeValue
DisplayWriteType = $writeType
}

Add-AnalyzedResultInformation @params

if ($writeType -ne "Green") {
$params = $baseParams + @{
Details = "More Information: https://aka.ms/HC-NodeRunnerMemoryCheck"
DisplayWriteType = "Yellow"
DisplayCustomTabNumber = 2
}

Add-AnalyzedResultInformation @params
}
}
}
} catch {
$params = $baseParams + @{
Name = "$configKey Invalid Config Format"
Details = "True --- Error: Not able to convert to xml which means it is in an incorrect format that will cause problems with the process."
DisplayTestingValue = $true
DisplayWriteType = "Red"
}

Add-AnalyzedResultInformation @params
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -349,33 +349,36 @@ function Invoke-AnalyzerOsInformation {

if ($null -ne $osInformation.VcRedistributable) {

$installed2012 = Get-VisualCRedistributableLatest 2012 $osInformation.VcRedistributable
$installed2013 = Get-VisualCRedistributableLatest 2013 $osInformation.VcRedistributable

if (Test-VisualCRedistributableUpToDate -Year 2012 -Installed $osInformation.VcRedistributable) {
$displayWriteType2012 = "Green"
$displayValue2012 = "$((Get-VisualCRedistributableInfo 2012).VersionNumber) Version is current"
$displayValue2012 = "$($installed2012.DisplayVersion) Version is current"
} elseif (Test-VisualCRedistributableInstalled -Year 2012 -Installed $osInformation.VcRedistributable) {
$displayValue2012 = "Redistributable is outdated"
$displayValue2012 = "Redistributable ($($installed2012.DisplayVersion)) is outdated"
$displayWriteType2012 = "Yellow"
}

if (Test-VisualCRedistributableUpToDate -Year 2013 -Installed $osInformation.VcRedistributable) {
$displayWriteType2013 = "Green"
$displayValue2013 = "$((Get-VisualCRedistributableInfo 2013).VersionNumber) Version is current"
$displayValue2013 = "$($installed2013.DisplayVersion) Version is current"
} elseif (Test-VisualCRedistributableInstalled -Year 2013 -Installed $osInformation.VcRedistributable) {
$displayValue2013 = "Redistributable is outdated"
$displayValue2013 = "Redistributable ($($installed2013.DisplayVersion)) is outdated"
$displayWriteType2013 = "Yellow"
}
}

$params = $baseParams + @{
Name = "Visual C++ 2012"
Name = "Visual C++ 2012 x64"
Details = $displayValue2012
DisplayWriteType = $displayWriteType2012
}
Add-AnalyzedResultInformation @params

if ($exchangeInformation.GetExchangeServer.IsEdgeServer -eq $false) {
$params = $baseParams + @{
Name = "Visual C++ 2013"
Name = "Visual C++ 2013 x64"
Details = $displayValue2013
DisplayWriteType = $displayWriteType2013
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,23 @@ function Get-ExchangeApplicationConfigurationFileValidation {
$results = @{}
$ConfigFileLocation |
ForEach-Object {
$obj = Invoke-ScriptBlockHandler -ComputerName $ComputerName -ScriptBlockDescription "Getting Exchange Application Configuration File Validation" `
-CatchActionFunction ${Function:Invoke-CatchActions} `
-ScriptBlock {
param($Location)
return [PSCustomObject]@{
Present = ((Test-Path $Location))
FileName = ([IO.Path]::GetFileName($Location))
FilePath = $Location

$params = @{
ComputerName = $ComputerName
ScriptBlockDescription = "Getting Exchange Application Configuration File Validation"
ArgumentList = $_
ScriptBlock = {
param($Location)
return [PSCustomObject]@{
Present = ((Test-Path $Location))
FileName = ([IO.Path]::GetFileName($Location))
FilePath = $Location
Content = (Get-Content $Location -Raw)
}
}
} -ArgumentList $_
}

$obj = Invoke-ScriptBlockHandler @params
$results.Add($obj.FileName, $obj)
}
return $results
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,13 @@ function Get-ExchangeInformation {
}
}

$applicationConfigFileStatus = Get-ExchangeApplicationConfigurationFileValidation -ComputerName $Server -ConfigFileLocation ("{0}EdgeTransport.exe.config" -f $serverExchangeBinDirectory)
$configParams = @{
ComputerName = $Server
ConfigFileLocation = @("$([System.IO.Path]::Combine($serverExchangeBinDirectory, "EdgeTransport.exe.config"))",
"$([System.IO.Path]::Combine($serverExchangeBinDirectory, "Search\Ceres\Runtime\1.0\noderunner.exe.config"))")
}

$applicationConfigFileStatus = Get-ExchangeApplicationConfigurationFileValidation @configParams
$serverMaintenance = Get-ExchangeServerMaintenanceState -Server $Server -ComponentsToSkip "ForwardSyncDaemon", "ProvisioningRps"
$settingOverrides = Get-ExchangeSettingOverride -Server $Server -CatchActionFunction ${Function:Invoke-CatchActions}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="customLists" type="Microsoft.Exchange.Transport.TransportAppConfig+ConfigurationListsSection,Microsoft.Exchange.Transport, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</configSections>
<runtime>
<gcServer enabled="true" />
<generatePublisherEvidence enabled="false" />
</runtime>
<appSettings>
<add key="AgentLogEnabled" value="true" />
<add key="ResolverRetryInterval" value="30" />
<add key="DeliverMoveMailboxRetryInterval" value="2" />
<add key="ResolverLogLevel" value="Disabled" />
<add key="ExpansionSizeLimit" value="1000" />
<add key="MaxIdleTimeBeforeResubmit" value="12:00:00" />
<add key="MailboxDeliveryQueueRetryInterval" value="00:05:00" />
<add key="MailboxDeliveryFastQueueRetryInterval" value="00:00:02" />
<add key="QuarantinedMailboxRetryInterval" value="00:05:00" />
<add key="QueueGlitchRetryInterval" value="00:01:00" />
<add key="QueueGlitchRetryCount" value="4" />
<add key="PFReplicaAgeThreshold" value="2.00:00:00" />
<add key="MaxQueueViewerQueryResultCount" value="250000" />
<add key="RoutingConfigReloadInterval" value="12:00:00" />
<add key="DumpsterAllowDuplicateDelivery" value="false" />
<add key="DatabaseCheckPointDepthMax" value="384MB" />
<add key="DatabaseMaxCacheSize" value="512MB" />
<add key="DatabaseMinCacheSize" value="32MB" />
<add key="DatabaseCacheFlushStart" value="3" />
<add key="DatabaseCacheFlushStop" value="5" />
<add key="BufferedStreamSize" value="32KB" />
<add key="QueueDatabaseMaxConnections" value="4" />
<add key="QueueDatabaseLoggingFileSize" value="5MB" />
<add key="QueueDatabaseLoggingBufferSize" value="5MB" />
<add key="QueueDatabaseMaxBackgroundCleanupTasks" value="32" />
<add key="QueueDatabaseOnlineDefragSchedule" value="1:00:00" />
<add key="QueueDatabaseOnlineDefragTimeToRun" value="3:00:00" />
<add key="QueueDatabasePath" value="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue" />
<add key="QueueDatabaseLoggingPath" value="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue" />
<add key="IPFilterDatabasePath" value="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\IpFilter" />
<add key="IPFilterDatabaseLoggingPath" value="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\IpFilter" />
<add key="TemporaryStoragePath" value="C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Temp" />
<add key="CrashOnStopTimeout" value="false" />
<add key="DnsFaultTolerance" value="Lenient" />
<add key="PriorityQueuingEnabled" value="false" />
<add key="MaxPerDomainHighPriorityConnections" value="3" />
<add key="MaxPerDomainNormalPriorityConnections" value="15" />
<add key="MaxPerDomainLowPriorityConnections" value="2" />
<add key="HighPriorityMessageExpirationTimeout" value="8:00:00" />
<add key="NormalPriorityMessageExpirationTimeout" value="2.00:00:00" />
<add key="LowPriorityMessageExpirationTimeout" value="2.00:00:00" />
<add key="HighPriorityDelayNotificationTimeout" value="00:30:00" />
<add key="NormalPriorityDelayNotificationTimeout" value="4:00:00" />
<add key="LowPriorityDelayNotificationTimeout" value="8:00:00" />
<add key="MaxHighPriorityMessageSize" value="250KB" />
<add key="ByteEncoderTypeFor7BitCharsets" value="1" />
<add key="PercentileLatencyExpiryInterval" value="00:05:00" />
<add key="PercentileLatencyInfinityInterval" value="00:15:00" />
<add key="SyncLogEnabled" value="false" />
<add key="SyncLogLoggingLevel" value="0" />
<add key="SmtpAvailabilityMinConnectionsToMonitor" value="20" />
<add key="DeliveryFailureMinSampleRouting5_4_4" value="200" />
<add key="DeliveryFailureMinSampleResolver5_1_4" value="0" />
<add key="DeliveryFailureMinSampleResolver5_2_0" value="1000" />
<add key="DeliveryFailureMinSampleResolver5_2_4" value="200" />
<add key="DeliveryFailureMinSampleResolver5_4_6" value="0" />
<add key="DeliveryFailureMinSampleDeliverySMTP5_6_0" value="200" />
<add key="DeliveryFailureMinSampleStoreDriver5_2_0" value="500" />
<add key="DeliveryFailureMinSampleStoreDriver5_6_0" value="100" />
<add key="DeliveryFailureMinSampleDeliveryAgent" value="1000" />
<add key="DeliveryFailureMinSampleForeignConnector" value="1000" />
<add key="DnsIpv6Enabled" value="true" />
<add key="SmtpSendTreatTransientErrorsAsPermanentErrors" value="true" />
<add key="ShadowRedundancyPromotionEnabled" value="False" />
<add key="IsResolverEnabled" value="True" />
</appSettings>
<system.net>
<connectionManagement>
<add address="*" maxconnection="10" />
</connectionManagement>
</system.net>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="SecureBinding" maxConnections="100000">
<security mode="Transport">
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:1009/Microsoft.Exchange.Security.Authentication.FederatedAuthService" binding="netTcpBinding" bindingConfiguration="SecureBinding" contract="Microsoft.Exchange.Security.Authentication.FederatedAuthService.IAuthService" name="Microsoft.Exchange.Security.Authentication.FederatedAuthService" />
</client>
</system.serviceModel>
<customLists>
<downgradedResponses>
<add value="504 5.7.4 Unrecognized authentication type" />
<add value="530 5.7.0 Must issue a STARTTLS command first" />
<add value="530 5.7.1 Client was not authenticated" />
<add value="530 5.7.1 Not authenticated" />
<add value="535 5.7.3 Authentication unsuccessful" />
<add value="550 5.2.2 Submission quota exceeded" />
<add value="550 5.3.5 System incorrectly configured" />
<add value="550 5.4.1" />
<add value="550 5.7.1" />
<add value="550 5.7.7 Access Denied, bad EHLO" />
<add value="554 5.4.4 Unable to route" />
<add value="554 5.4.4 Unable to route due to invalid recipient address" />
<add value="554 5.6.0 Invalid message content" />
<add value="554 5.7.3 Unable to initialize security subsystem" />
</downgradedResponses>
<upgradedResponses>
<add value="421 4.7.1 ^.*All messages from .* will be permanently deferred" />
</upgradedResponses>
</customLists>
</configuration>

This file was deleted.

Loading

0 comments on commit 12b67b1

Please sign in to comment.