Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
1 Minuten Lesezeit (299 Worte)

Aus einer Liste von Datumswerten jeweils x Sekunden überspringen

Zeitpfeil

Um aus einer Liste von Datumswerten (z.B. aus einer Logdatei) nur einen Wert pro  Zeiteinheit (also z.B. pro Sekunde) auszugeben, erstellt man sich zuerst einen Wert, der die Sprungweite speichert. Da Powershell Zeitwerte in 10.000.000stel Sekunden - den sogenannten Ticks - speichert, muss die Sprungweite mit den Ticks pro Zeiteinheit multipliziert werden. Die Ticks holt man sich am Besten aus der Timespan-Klasse, weil man sich bei der Menge von Nullen schon mal vertippen kann und es auch deutlich besser lesbarer ist. Auf die Timespan-Klasse greift man mit eckigen Klammern zu: [Timespan]. 

$RangeInSeconds = 10
$Range = $RangeInSeconds * [TimeSpan]::TicksPerSecond 

Anschließend speichert man den ältesten Zeitwert der Liste in einer Variablen, durchläuft mit einer Foreach-Schleife die Liste und vergleicht die Ticks des Datumswert des Listenelements mit dem ersten Zeitwert. Wenn ein passender Zeitwert gefunden wurde, muss der Vergleichswert jeweils um die Range erhöht werden. Dafür muss das Listenelement das Datum als Datetime-Objekt gespeichert haben. Ist das nicht der Fall, kann man das Datum zuerst konvertieren. Das geht über die explizite Konvertierung zu Datetime oder, falls das Datum nicht korrekt erkannt wird, weil z.B. das deutsche Datumsformat tt-mm-yyyy verwendet wird, mit der statischen Datetime-Methode Parseexact.

[DateTime]'2024-03-02'  # Konvertiert den 3. März 2024
[DateTime]'03-02-2024'  # Konvertiert den 3. Februar 2024
[DateTime]::Parseexact('03-02-2024','dd-MM-yyyy') # 3.02.2024 

Bei der Konvertierung kann in allen 3 Beispielen auch die Uhrzeit angegeben werden: '2024-03-02 19:01:23'. Die Kürzel für Sekunden, Minuten und Stunden sind dann ss, mm und HH. Die Groß-/Kleinschreibung ist hier wichtig, da MM für Monat und mm für Minuten steht!

Die Foreach-Schleife sieht dann ungefähr so aus:

$counter = $Entries[0].Date.Ticks   # den ersten Wert der Liste als Vergleich speichern
Foreach ( $Entry in $Entries ) {
    If ( $Entry.Date.Ticks -ge $Counter )  
    {
        $Entry
        $Counter += $Range          # Den Vergleichwert um die Range erhöhen 
   }
} 
Text für reguläre Ausdrücke vorbereiten - Spezialz...
E-mails in Joomla werden von Google als nicht zulä...
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Montag, 20. Mai 2024

Sicherheitscode (Captcha)