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-Key: 2946388094

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

Printed on: April 28, 2024 at 02:04 o'clock

Member: CH3COOH
CH3COOH Oct 12, 2023 at 12:31:01 (UTC)
Goto Top
Member: ItsJokaful
Solution ItsJokaful Oct 12, 2023 at 12:35:12 (UTC)
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
Member: TK1987
Solution TK1987 Oct 12, 2023 updated at 13:14:59 (UTC)
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
Member: MarciMarc85
MarciMarc85 Oct 12, 2023 at 13:11:21 (UTC)
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
Member: MarciMarc85
MarciMarc85 Oct 12, 2023 at 13:15:46 (UTC)
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.
Member: CH3COOH
CH3COOH Oct 16, 2023 at 14:12:43 (UTC)
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ß