marcimarc85
Goto Top

Powershell - Aktuelle Zeitzone mit Serverzeit vergleichen

Für ein Monitoring möchte ich die aktuelle Zeitzone, in der sich ein server befindet mit der tasächlichen Systemzeit des Servers vergleichen. diese sollten identisch sein (zumindest bis auf die Minute).

Beispiel: Virtuelle Server beim Kunden in England:

Invoke-RestMethod -Uri 'worldtimeapi.org/api/timezone/Europe/London' | select datetime   

datetime                        
--------                        
2023-10-12T13:22:32.313000+01:00

daraus brauche ich jetzt den Part mit der Uhrzeit gefiltert (HH:mm) und möchte das mit
get-date -format HH:mm
auf den entsprechenden Zielsystem vergleichen und entsprechend 'true' und 'false' ausgeben für den Sensor.

Wie kann ich die Api-Abfrage trimmen, sodass ich die Werte gegenüberstellen kann?

Content-ID: 2946388094

Url: https://administrator.de/contentid/2946388094

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

CH3COOH
CH3COOH 12.10.2023 um 14:31:01 Uhr
Goto Top
ItsJokaful
Lösung ItsJokaful 12.10.2023 um 14:35:12 Uhr
Goto Top
Servus,

# API-Aufruf
$apiResponse = Invoke-RestMethod -Uri 'worldtimeapi.org/api/timezone/Europe/London' | Select-Object -ExpandProperty datetime  

# Extrahieren der Uhrzeit (HH:mm) aus der API-Antwort
$apiTime = $apiResponse.Substring(11, 5)

# Systemzeit im HH:mm-Format abrufen
$systemTime = Get-Date -Format HH:mm

# Vergleich der Uhrzeiten
$comparisonResult = $apiTime -eq $systemTime

# Ausgabe des Vergleichsergebnisses
$comparisonResult
TK1987
Lösung TK1987 12.10.2023 aktualisiert um 15:14:59 Uhr
Goto Top
Moin,

die Datetime-Property aus der Antwort kannst du direkt mit Get-Date umwandeln
Get-Date (Invoke-RestMethod -Uri 'worldtimeapi.org/api/timezone/Europe/London').Datetime -Format "HH:mm"  

Für einen Vergleich ist das Trimmen allerdings vollkommen unnötig. Mit New-TimeSpan kannst du Zeiten problemlos vergleichen. Wenn du -Start oder -End weg lässt, wird dafür jeweils die aktuelle Zeit verwendet. Prüfen, ob die Zeitspanne weniger als eine Minute beträgt geht also z.B. so
[Math]::Abs((New-Timespan -Start (Invoke-RestMethod -Uri 'worldtimeapi.org/api/timezone/Europe/London').Datetime).TotalMinutes) -lt 1  

Gruß Thomas
MarciMarc85
MarciMarc85 12.10.2023 um 15:11:21 Uhr
Goto Top
Zitat von @CH3COOH:

Guten Tag,
eventuell hilft dir das hier, ist fertig face-wink


Danke. sieht schonmal vielversprechend aus, aber irgendwie bekomm eich das Modul nicht importiert mit 'Import-Module'
Bzw. importiert wird es schon. beim Ausführen bekomme ich aber
New-IcingaCheckResult : The term 'New-IcingaCheckResult' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or   
if a path was included, verify that the path is correct and try again.
At D:\Invoke-IcingaCheckTimeSync.psm1:114 char:13
zurück
MarciMarc85
MarciMarc85 12.10.2023 um 15:15:46 Uhr
Goto Top
Zitat von @ItsJokaful:

Servus,

# API-Aufruf
$apiResponse = Invoke-RestMethod -Uri 'worldtimeapi.org/api/timezone/Europe/London' | Select-Object -ExpandProperty datetime  

# Extrahieren der Uhrzeit (HH:mm) aus der API-Antwort
$apiTime = $apiResponse.Substring(11, 5)

# Systemzeit im HH:mm-Format abrufen
$systemTime = Get-Date -Format HH:mm

# Vergleich der Uhrzeiten
$comparisonResult = $apiTime -eq $systemTime

# Ausgabe des Vergleichsergebnisses
$comparisonResult

Das reciht mir schon. Eine simple, aber effektive Abfrage. Die kann ich jetzt als Sensor verscripten. Danke.

Die Variante von @CH3COOH interessiert mich aber dennoch.
CH3COOH
CH3COOH 16.10.2023 um 16:12:43 Uhr
Goto Top
Zitat von @MarciMarc85:

Die Variante von @CH3COOH interessiert mich aber dennoch.

Guten Tag,
du hast nur einen Befehl importiert; wenn du diesen nicht nachbauen magst wäres hilfreicher des komplette Icinga Module zu importieren:
https://github.com/Icinga/icinga-powershell-plugins/tree/master

Du kannst auch das ganze Modul einfach in deinen Powershell-Modules Ordner kopieren und dann mit Unblock-File einmalig entsperren face-wink

Gruß