Systemzeit remote auf der Kommandozeile oder mit PowerShell abfragen

    Windows SystemzeitWindows bietet mit net.exe und w32tm.exe schon lange zwei Dienst­pro­gramme für die Kom­man­do­zeile, mit denen sich die System­zeit von Remote-PCs ab­fragen lässt. Power­Shell muss für die Aufgabe Get-Date remote aus­führen oder WMI bemühen.

    Eine zwischen den Mitgliedern einer Domäne abgestimmte Systemzeit ist wichtig, um eine fehlerfreie Replikation zwischen DCs sowie die Authenti­fizierung über Kerberos zu gewähr­leisten. Aus diesem Grund synchronisiert der Windows Time Service automatisch alle Clients und Member-Server mit einem der DCs (siehe dazu: Zeiteinstellungen in Windows-Domänen über NTP konfigurieren).

    Abweichungen aufspüren mit net.exe

    In der Praxis können trotzdem immer wieder Abweichungen auftreten, wenn etwa ein Rechner nach einem OS-Upgrade die Verbindung zum Zeitgeber verliert oder wenn VMs ihre Systemzeit mit dem Host synchronisieren. Möchte man in dieser Situation herausfinden, wie die Uhren verschiedener Remote-PCs gehen, dann helfen am besten die Tools für die Kommandozeile.

    Am einfachsten zu handhaben ist dabei net.exe mit dem Parameter time:

    net time \\computername

    Ausgabe der Systemzeit von einem entfernten PC mit net /time

    Alternativ zum Namen des Remote-Computers kann man jenen der Domäne angeben, um die Zeit des primären DC zu erhalten:

    net time /domain:windowspro.local

    Ergänzt man den Schalter /SET, dann kann man die Uhr des lokalen Rechners an der Domäne oder dem entfernten PC ausrichten.

    Das Dienstprogramm net.exe benutzt für die Remote-Abfrage der Systemzeit einen RPC und ist somit unabhängig vom Time Service, falls dieser auf einem PC nicht laufen sollte oder falsch konfiguriert wurde. Gerade beim Troubleshooting kann sich das als Vorteil erweisen. Allerdings verliert auch dieses Tool den Zugriff auf einen Rechner, wenn die Abweichung der Systemzeiten zu groß ist.

    Differenz anzeigen mit w32tm

    Dagegen setzt w32tm.exe auf die Infrastruktur des Timer Service auf und nutzt NTP für die Kommunikation mit den Remote-PCs. Ein Pluspunkt dieses Tools sind die vielfältigen Optionen, mit denen es sich aufrufen lässt. Zudem besteht die Möglichkeit, gleiche mehrere Zielrechner als Argument zu übergeben:

    w32tm /monitor /Computers:win81-l1,ws2012-dc1

    Dieser Befehl gibt nicht die absolute Uhrzeit der entfernten PCs zurück, sondern die Abweichung ihrer Zeiteinstellung vom lokalen Rechner.

    w32tm mit dem Parameter monitor zeigt die Abweichung der Systemzeiten an.

    Aufgrund seiner Abhängigkeit vom Timer Service muss man bei diesem Kommando darauf gefasst sein, dass es mit einer Fehlermeldung wie ERROR_TIMEOUT aussteigt, wenn Probleme mit der Synchronisierung vorliegen.

    PowerShell

    Das Cmdlet für diese Aufgabe ist Get-Date, das ohne Angabe von Parametern einfach die lokale Systemzeit anzeigt. Allerdings gehört es zu den Kommandos, die kein Remoting unterstützen. Daher muss man erst explizit eine Remote-Session aufbauen und in dieser den Befehl absetzen:

    Invoke-Command -ComputerName win81-L1 {get-date}

    Dem Parameter Computername kann man wie gewohnt auch mehrere, durch Kommata getrennt Hostnamen übergeben.

    Systemzeit über WMI abrufen

    Alternativ zu Get-Date empfiehlt sich der Zugriff auf die WMI-Klasse Win32_LocalTime, um die Systemzeit von entfernten Rechnern auszulesen:

    Get-CimInstance -ComputerName hv2016-vm1 -ClassName Win32_LocalTime|
    ft Hour, Minute, Second -HideTableHeaders

    Anstelle von Get-CimInstance kann man auch das ältere, RPC-basierte Get-WmiObject verwenden.

    Abrufen der Systemzeit mit PowerShell und WMI

    Die Ausgabe beider Kommandos wird man der Übersichtlichkeit halber aufbereiten. Dafür bietet sich wie oben die Verwendung von Format-Table (Alias ft) an, mit dem man auch die Spalten­überschriften entfernen kann.

    Keine Kommentare