In letzter Zeit kam es vermehrt zu Office 365-Migrationen, die aufgrund einer einfachen Einstellung scheiterten, die oft übersehen wird.
<!– wp:rank-math/toc-block {"headings":[{"key":"5f2eb3f2-3651-41e3-9f50-04ddeabbc7e7","content":"Exchange Server TCP-Keep-Alive-Zeit Was ist das? }, {„key“:“fbe2a84-95ca6-2e46-3c9-49d60d8843569″“,content“:“TCP Keep Alive Time Konfiguration“, „level“:3, „link“: „#tcp-keep-alive-time-configuration“, „disable“:false, „isUpdated“:false, „isGeneratedLink“:true}], „listStyle“: ”ul”} –>Was ist Exchange Server TCP Keep Alive Time?
TCP Keep Alive Time wird als TCP/IP-Parameter bezeichnet, der sicherstellt, dass eine Anfrage in Exchange Server verbunden bleibt. Dieser Parameter wird verwendet, um die TCP-Verbindung aktiv zu halten, wenn für einen bestimmten Zeitraum keine Datenanforderung erfolgt.
Wenn also die Verbindung zwischen einem Client und einem Server für einen bestimmten Zeitraum unterbrochen wird, greift der TCP-Keep-Alive-Mechanismus und überprüft, ob die Verbindung noch offen ist, indem er ein kleines Prüfpaket sendet. Erfolgt keine Antwort, wird die Verbindungsanfrage abgebrochen.
TCP-Keep-Alive-Zeit Sein Wert bestimmt, wie oft diese Kontrollpakete gesendet werden. Diese Dauer ist normalerweise ein vom System festgelegter Standardwert, kann jedoch an die Bedürfnisse des Benutzers angepasst werden. Diese Einstellung ist insbesondere dann wichtig, wenn die Verbindung auch dann nicht unterbrochen werden soll, wenn nicht ständig Daten über das Netzwerk ausgetauscht werden.
Beispiele für diese Situation sind Remote-Terminalsitzungen, Datenbankverbindungen und andere langfristige TCP-Sitzungen.
Konfigurieren der TCP-Keep-Alive-Zeit
TCP-Keep-Alive-Zeit Wenn die Einstellung nicht korrekt ist, wird der Standardzeitraum von 2 Stunden verwendet. Netzwerkgeräte stellen diese Zeit jedoch normalerweise auf eine kürzere Zeit ein.
Microsoft in Ihrer Umgebung TCP-Keep-Alive-Zeit um Werte zu melden und diese Werte bei Bedarf zu aktualisieren. TCP-Keep-Alive-Zeitbericht stellt das Tool zur Verfügung. Dieses Szenario hat sich insbesondere für große Umgebungen als äußerst nützlich erwiesen.
Skript, spezifisch Active Directory Bei der Ausführung auf einer Site sind alle Site-spezifisch Austausch Analysiert Server.
Das Skript wird ausgeführt Active Directory zur Seite gehörend Austausch Durch die Abfrage von Servern erstellt TCP einen CSV-Bericht, der den Status des KeepAliveTime-Registrierungsschlüssels enthält. Dieser Bericht gibt die Namen der Server an, gibt an, ob der Registrierungsschlüssel vorhanden ist und wenn ja, welchen Wert er hat.
Das Skript fragt Sie, ob Sie die Registrierungsschlüssel ändern möchten. Die Standardantwort lautet „Nein“. Wenn „Ja“ ausgewählt ist, TCP-Keep-Alive-Zeit Sie werden aufgefordert, den Registrierungsschlüssel zu ändern, der standardmäßig 30 Minuten lang 1.800.000 Millisekunden beträgt. Wenn Sie einen eigenen Wert eingeben möchten, sollten nur ganze Zahlen eingegeben werden und alle Dauern sollten in Millisekunden angegeben werden.
Beachten Sie, dass die Server neu gestartet werden müssen, damit die Änderungen wirksam werden. Ein Zeitraum von 15 bis 30 Minuten wird empfohlen, da eine niedrige Einstellung der TCP Keep Alive Time die CPU-Auslastung des Servers erhöhen kann.
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
Nachdem das entsprechende Skript ausgeführt wurde, erstellt es eine CSV-Datei mit dem TCP-Keep-Alive-Time-Wert aller Exchange Server-Server in Ihrer Umgebung. Auf diese Weise können Sie die Werte Ihrer gesamten Umgebung überprüfen.
2 Kommentare zu „Exchange Server TCP Keep Alive Time“