Récemment, on a constaté une augmentation des échecs de migration vers Office 365 en raison d’un simple paramètre souvent négligé.
<!– wp:rank-math/toc-block {"headings":[{"key":"5f2eb3f2-3651-41e3-9f50-04ddeabbc7e7","content":"Exchange Server Temps de maintien TCP en vie Qu'est-ce que c'est ? }, {"key":"fbe2a84-95ca6-2e46-3c9-49d60d8843569″,"content":"TCP Keep Alive Time Configuration", "level": 3, "link": "#tcp-keep-alive-time-configuration", "disable": false, "isUpdated": false, "isGeneratedLink": true}], "listStyle": "ul"} ->Qu’est-ce que la durée de conservation TCP du serveur Exchange ?
TCP Keep Alive Time est connu comme le paramètre TCP/IP utilisé pour garantir qu'une requête reste connectée à Exchange Server. Ce paramètre est utilisé pour maintenir la connexion TCP active lorsqu'il n'y a pas de demande de données pendant un certain temps.
Ainsi, lorsque la connexion entre un client et un serveur devient silencieuse pendant un certain temps, le mécanisme TCP Keep Alive entre en jeu et vérifie que la connexion est toujours ouverte en envoyant un petit paquet de vérification. Si aucune réponse n'est reçue, la demande de connexion est terminée.
Temps de maintien TCP en vie Sa valeur détermine la fréquence à laquelle ces paquets de contrôle sont envoyés. Cette durée est généralement une valeur par défaut définie par le système mais peut être ajustée en fonction des besoins de l'utilisateur. Ce paramètre est particulièrement important dans les cas où la connexion ne doit pas être interrompue même si les données ne sont pas constamment échangées sur le réseau.
Par exemple, les sessions de terminal distant, les connexions à des bases de données et autres sessions TCP à long terme en sont des exemples.
Configuration du temps de maintien TCP
Temps de maintien TCP en vie Si elle n’est pas définie correctement, la période par défaut de 2 heures est utilisée. Cependant, les équipements réseau règlent généralement cette durée sur une durée plus courte.
Microsoft dans votre environnement Temps de maintien TCP en vie pour signaler les valeurs et mettre à jour ces valeurs si nécessaire. Rapport de temps TCP Keep Alive fournit l'outil. Ce scénario s’est révélé extrêmement utile, en particulier pour les grands environnements.
script, spécifique Le tiering Active Directory Lorsqu'ils sont exécutés sur un site, tous les éléments spécifiques au site Échange Analyse les serveurs.
Le script est exécuté Le tiering Active Directory appartenant au site Échange En interrogeant les serveurs, TCP produit un rapport CSV contenant l'état de la clé de registre KeepAliveTime. Ce rapport indique les noms des serveurs, si la clé de registre existe et si oui, quelle valeur elle a.
Le script vous demande si vous souhaitez modifier les clés de registre. La réponse par défaut est « Non ». Si « Oui » est sélectionné, Temps de maintien TCP en vie Vous serez invité à modifier la clé de registre, qui est par défaut de 30 1.800.000 XNUMX millisecondes pendant XNUMX minutes. Si vous souhaitez saisir votre propre valeur, seuls des nombres entiers doivent être saisis et toutes les durées doivent être spécifiées en millisecondes.
Notez que les serveurs doivent être redémarrés pour que les modifications prennent effet. Une période de 15 à 30 minutes est recommandée, car un réglage faible du temps TCP Keep Alive peut augmenter la charge du processeur du serveur.
https://github.com/jojerd/TCPKeepAliveTimeReportScript
<#
.NOTES
Name: TCPKeepAliveTimeChecker.ps1
Author: Josh Jerdon
Email: [email protected]
Requires: PowerShell 3.0, Exchange Management Shell as well as administrator rights on the target Exchange
server.
Version History:
1.0 - 5/15/2017
1.01 - 6/28/2017 Fixed Foreach loop bug asking for KeepAliveTime Value for each server when changing multiple servers.
1.02 - 3/7/2018 Fixed PSSnapin load errors if script was executed more than once in a single PowerShell session. Also refined how script checks for PowerShell version.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.SYNOPSIS
Checks all of the Exchange Servers within a given AD site and generates a report of it's findings,
namely if the TCP KeepAliveTime registry key exists and if so what the value is.
It also provides the functionality to modify the TCP Keep Alive Settings of all Exchange servers
in the local AD site. This is extremely useful in large Exchange organizations but should be used with
care.
#>
#Checking Powershell Version to Ensure Script Works as Intended
if ($PSVersionTable.PSVersion.Major -gt 3) {
Write-Host "PowerShell meets minimum version requirements, continuing" -ForegroundColor Green
Start-Sleep -Seconds 3
Clear-Host
#Add Exchange Management Capabilities Into The Current PowerShell Session.
$CheckSnapin = (Get-PSSnapin | Where {$_.Name -eq "Microsoft.Exchange.Management.PowerShell.E2010"} | Select Name)
if ($CheckSnapin -like "*Exchange.Management.PowerShell*") {
Write-Host "Exchange Snap-in already loaded, continuing...." -ForegroundColor Green
}
else {
Write-Host "Loading Exchange Snap-in Please Wait..."
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue
}
#Search local AD Site for all Exchange Servers.
$ADSite = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name
Write-Host "Searching Active Directory Site $ADSite for Exchange Servers, Please Wait..."
$Servers = Get-ExchangeServer | Where-Object {$_.Site -match $ADSite}
#File Output parameters for report output
$OutputFilePath = "."
$OutPutReportName = "TCPKeepAliveTimeReport" + "-" + (Get-Date).ToString("MMddyyyyHHmmss") + ".csv"
$OutPutFullReportPath = $OutputFilePath + "" + $OutPutReportName
if ($Servers.count -gt 0) {
#Connect to Each server that it finds from above and open the KeepAliveTime registry key if it exists and record the value.
foreach ($Server in $Servers) {
$EXCHServer = $Server.name
$OpenReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $EXCHServer)
$RegKeyPath = 'SYSTEMCurrentControlSetServicesTcpipParameters'
$RegKey = $OpenReg.OpenSubKey($RegKeyPath)
$TCPKeepAlive = $RegKey.GetValue('KeepAliveTime')
$Exists = if ($TCPKeepAlive) {$true} else {$false}
#Dump the scripts findings into an object.
$Report = [PSCustomObject]@{
"Server Name" = $EXCHServer;
"Key Present" = $Exists;
"TCP Keep Alive Time" = $TCPKeepAlive
}
#Write the output to a report file
$Report | Export-Csv ($OutPutFullReportPath) -Append -NoTypeInformation
}
}
else {
Write-Host "Found 0 Exchange Servers, Exiting Script..." -ForegroundColor Red
Write-Host " "
Write-Host " "
Write-Host "Press Any Key To Continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exit
}
#Asks if you'd like to change the TCP Keep Alive Times.
Clear-Host
$Message = "Do You Want To Create And Or Modify The TCP KeepAliveTime Registry Key?"
$Yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "help";
$No = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "help";
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes, $no);
$answer = $host.UI.PromptForChoice($caption, $message, $choices, 1)
switch ($answer) {
0 {Write-Host "Continuing Script As You Have Confirmed That You Want To Create And Or Modify The TCP KeepAliveTime Registry Key"; Start-Sleep -Seconds 5}
1 {Write-Host "Exiting Script..."; exit}
}
Clear-Host
$TimeValue = Read-Host 'How Many Milliseconds Do You Want The TCP Keep Alive Time Set Too? (Default is 1,800,000ms (30 minutes)'
$DefaultValue = "1800000"
$KeyName = "KeepAliveTime"
Clear-Host
foreach ($Server in $Servers) {
$EXCHServer = $Server.name
$BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $EXCHServer)
$SubKey = $BaseKey.OpenSubkey("SYSTEMCurrentControlSetServicesTcpipParameters", $true)
if ($TimeValue) {
$SubKey.SetValue($KeyName, $TimeValue, [Microsoft.Win32.RegistryValueKind]::DWORD)
}
Else {
$SubKey.SetValue($KeyName, $DefaultValue, [Microsoft.Win32.RegistryValueKind]::DWORD)
}
}
Clear-Host
Write-Host 'Each Server That Had Its TCP Keep Alive Time Value Changed Will Require A Reboot For The Changes To Take Affect.' -ForegroundColor Green
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exit
}
else {
Write-Host "PowerShell Version does not meet minimum requirements of at least 3.0, please update to at least PowerShell 3.0 and try again." -ForegroundColor Red
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exit
}
Exit
Une fois le script concerné exécuté, il crée un fichier CSV contenant la valeur TCP Keep Alive Time de tous les serveurs Exchange Server de votre environnement. De cette façon, vous pouvez contrôler les valeurs de l’ensemble de votre environnement.
2 commentaires sur « Exchange Server TCP Keep Alive Time »