Verwenden von PowerShell zum Vergleichen der lokalen Systemzeit mit NTP-Servern

Die Zeitsynchronisation ist ein zentrales Element in der komplexen Maschine IT. Für verschiedene Funktionen und Sicherheitsprotokolle ist es unerlässlich, dass die Geräte in einem Netzwerk übereinstimmende Zeiten haben. Dieser Artikel befasst sich mit einem PowerShell-Skript, das die lokale Systemzeit mit einem NTP-Server vergleicht und signalisiert, ob die Differenz einen festgelegten Schwellenwert überschreitet.

Hintergrund

Mit der Entwicklung moderner IT-Infrastrukturen hat die Bedeutung der Zeitgenauigkeit zugenommen. Unstimmigkeiten, selbst wenn sie nur wenige Sekunden betragen, können zu Anomalien bei Anwendungen führen oder die Sicherheit gefährden. IT-Fachleute und Managed Service Provider (MSPs ) müssen eine genaue Zeitsynchronisation zwischen den Geräten sicherstellen. Unser Skript dient als Hilfsmittel, um mögliche Unstimmigkeiten zu erkennen.

Das Skript

#Requires -Version 5.1

<#
.SYNOPSIS
    Compares the local system time to an NTP server, returning an exit code of 0 if less than a 2 minute difference or 1 if more than 2 minute difference.
.DESCRIPTION
    Compares the local system time to an NTP server, returning an exit code of 0 if less than a 2 minute difference or 1 if more than 2 minute difference.
.EXAMPLE
    No parameters needed
    The maximum acceptable time difference of 2 minute.
.EXAMPLE
    -Max 5
    The maximum acceptable time difference of 5 minute.
.EXAMPLE
    -NtpServer "pool.ntp.org"
    The maximum acceptable time difference of 2 minute, but uses the ntp.org's pool and use the time server pool "pool.ntp.org".
    Alterative pools:
    time.google.com
    time.cloudflare.com
    time.facebook.com
    time.apple.com
    time.nist.gov
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Exit code 1: If the time is off more than Max
    Exit code 0: If the time is off less than or equal to Max
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [int]
    $Max = 2,
    [Parameter()]
    [string]
    $NtpServer = "time.windows.com"
)

begin {}
process {
    Write-Host "Using NTP server($NtpServer) to get time."
    $TimeSample = w32tm.exe /StripChart /Computer:"$NtpServer" /DataOnly /Samples:1
    $Diff = $($($TimeSample | Select-Object -Last 1) -split ', ' | Select-Object -Last 1) -replace '+' -replace '-'
    $TimeScale = $Diff -split '' | Select-Object -Last 1 -Skip 1

    # Convert to minutes
    $Diff = switch ($TimeScale) {
        "s" { [double]$($Diff -replace 's') / 60 }
        "m" { [double]$($Diff -replace 'm') }
        "h" { [double]$($Diff -replace 'h') * 60 * 60 }
        "d" { [double]$($Diff -replace 'd') * 60 * 60 * 24 }
        Default {}
    }
    Write-Host "Time Difference between NTP server and local system: $($([Math]::Round($Diff,2))) minutes"

    if ($Max -lt 0) {
        # If Max is negative then flip the sign to positive
        $Max = 0 - $Max
    }

    # Only output this if -Verbose is used
    Write-Verbose "$($Diff) minutes > $Max minutes = $($Diff -gt $Max)"
    # Assuming that $Max and $Diff are positive
    if (
        $Diff -gt $Max
    ) {
        # If time difference > $Max then return exit code of 1
        Write-Host "Time is over the maximum minutes of $Max."
        exit 1
    }
    else {
        # If time difference < $Max then return exit code of 0
        Write-Host "Time is under the maximum minutes of $Max."
        exit 0
    }
}
end {}

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Detailansicht

  • Cmdlet-Bindung & Parameter: Das Skript verwendet das CmdletBinding-Attribut, so dass es als Cmdlet verwendet werden kann und integrierte PowerShell-Funktionen nutzen kann. Es werden zwei Parameter angegeben: $Max, die maximal zulässige Zeitdifferenz (Standardwert: 2 Minuten), und $NtpServer, der zu prüfende Server (Standardwert: time.windows.com).
  • Prozess-Block: Die Hauptlogik wird hier ausgeführt.
  • Die Zeitdifferenz wird mit w32tm.exe, einem Windows-Befehlszeilentool, ermittelt.
  • Analysiert die abgerufene Zeit, indem er die Differenz und ihre Skala (Sekunden, Minuten usw.) feststellt.
  • Konvertiert die Zeitdifferenz in Minuten.
  • Vergleicht die berechnete Differenz mit $Max und gibt den entsprechenden Exit-Code zurück.

Potenzielle Anwendungsfälle

Stellen Sie sich einen IT-Experten vor, der ein riesiges Netzwerk von Geräten in einem Unternehmen beaufsichtigt. Sie haben Anomalien in Anwendungen beobachtet, die zeitgestempelte Aktionen protokollieren. Zur Diagnose setzen sie dieses Skript ein, um Geräte mit erheblichen Zeitabweichungen zu erkennen. Anhand der Ergebnisse können sie dann die notwendigen Anpassungen vornehmen.

Vergleiche

Es gibt zwar GUI-basierte Tools und Anwendungen von Drittanbietern, die Funktionen zur Zeitsynchronisierung bieten, aber dieses Skript zeichnet sich durch seine Einfachheit und Anpassungsfähigkeit aus. Es kann in bestehende IT-Workflows oder Automatisierungswerkzeuge integriert werden, was es zu einer vielseitigen Option macht.

FAQs

  • Kann ich verschiedene NTP-Server verwenden?
    Ja, das Skript bietet einen Standard, aber mit dem Parameter $NtpServer können Sie einen anderen Server angeben.
  • Was ist, wenn ich eine andere Zeitschwelle möchte?
    Ändern Sie den Parameter $Max auf die gewünschte Anzahl von Minuten.
  • Ist das Skript exklusiv für Windows?
    Das mitgelieferte Skript ist für Windows konzipiert, insbesondere für die Versionen 10 und Server 2016 und aufwärts.

Auswirkungen

Zeitliche Diskrepanzen mögen harmlos erscheinen, aber sie können tiefgreifende Auswirkungen haben. Ungleiche Zeitstempel können die Datenintegrität untergraben, geplante Aufgaben beeinträchtigen und Schwachstellen aufdecken. Angreifer können Zeitlücken ausnutzen, daher sind regelmäßige Überprüfungen mit Tools wie diesem Skript für die IT-Sicherheit von entscheidender Bedeutung.

Empfehlungen

  • Führen Sie das Skript in regelmäßigen Abständen aus, um eine kontinuierliche Überwachung zu gewährleisten.
  • Überprüfen Sie immer die Gültigkeit des verwendeten NTP-Servers.
  • Bei Unstimmigkeiten sollten Sie der Ursache auf den Grund gehen, da diese auf ein größeres Problem hindeuten könnten.

Abschließende Überlegungen

Während Skripte wie diese von unschätzbarem Wert sind, kann eine umfassende Plattform wie NinjaOne Ihr IT-Management verbessern. Durch die Integration von automatisierten Prüfungen, Überwachungen und Abhilfemaßnahmen kann NinjaOne Tools wie unser PowerShell-Skript ergänzen und sicherstellen, dass Ihre Infrastruktur sowohl funktionsfähig als auch sicher bleibt.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).