marcimarc85
Goto Top

Powershell Schleife die jeden Tag um Mitternacht eine Funktion ausführt

Eins vorweg: Ich benötige diese Schleife zu Testzwecken, für unser Monitoring, da es den gewünschten Befehl zwar per geplantem Task erkennt , aber einen Wert falsch ausgibt. Der korrekte Wert, wird erst angezeigt, wenn ich das Script manuell starte.

Daher möchte ich die Powershell gern geöffnet lassen und im Script einen Timer einbauen, der dieses immer wieder jeden Tag um 00:00:00 Uhr ausführt und nicht endet.

Ich muss gestehen, ich steh da gerade mit dem Timer etwas auf dem Schlauch.

Mein Ansatzt wärer jetzt gewesen die 00:00:00 fest zu definieren un dann hinten dran .addminutes(720) zu hängen

$TimeStart = '00:00:00'  
$TimeEnd = $TimeStart.addminutes(720)

Write-Host "Start Time: $TimeStart"  
write-host "End Time:   $TimeEnd"  
Do { 
 $TimeNow = Get-Date
 if ($TimeNow -ge $TimeEnd) {
  Write-host "It's time to finish."  
 } else {
  Write-Host "Not done yet, it's only $TimeNow"  
 }
 Start-Sleep -Seconds 10
}
Until ($TimeNow -ge $TimeEnd)

Bekomme aber die folgende Meldung:

Method invocation failed because [System.String] does not contain a method named 'addminutes'.

Content-Key: 544018

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

Printed on: April 25, 2024 at 04:04 o'clock

Member: tomolpi
tomolpi Feb 06, 2020 updated at 11:57:09 (UTC)
Goto Top
Abgesehen davon, dass ich diese Sache generell anders designen würde: die Fehlermeldung sagt aus, dass du versuchst, eine Funktion (addminutes) an einem Objekt auszuführen (String $TimeStart), was diese Funktion aber nicht kennt.
Daher musst du ein Zeit/Time Objekt verwenden, das kennt dann auch diese Funktion... Also, erst umwandeln in eine Zeit, und dann kannst du auch die minutes adden.

Kuckst du: https://devblogs.microsoft.com/scripting/adding-and-subtracting-dates-wi ...

LG

tomolpi
Member: Bitboy
Bitboy Feb 06, 2020 at 12:00:43 (UTC)
Goto Top
Würde auch eher schauen warum es mit dem Task nicht klappt als soetwas zu konstruieren.

Statt mühsamer vergleiche könntest du auch ein Start-slepp -Seconds 24*60*60 verwenden.
Member: MarciMarc85
MarciMarc85 Feb 06, 2020 at 12:26:41 (UTC)
Goto Top
Wie gesagt. Das eigentliche Script funktioniert mit dem Task. Warum auch immer, zeigt es aber nach 0 Uhr immer einen falschen Wert an (Das Script zählt ein bestimmtest Schlüsselwort in mehreren Logdateien, addiert diese und gibt diesen Wert dann an das Monitoring weiter). Am nächsten Tag fängt der Wert im Monitoring allerdings nicht bei 0 an sonden immer bei anderen Werten (von 80 - 130 war alles dabei). Erst wenn ich es auf dem Server einmal per Hand starte, wird der tagesaktuelle Wert im Script angezeigt und daraufhin auch sofort im Monitoring.

Deshalb würde ich das Script gern geöffnet lassen und quasi einen sichtbaren Task erstellen.
Member: Bitboy
Solution Bitboy Feb 06, 2020 at 12:53:03 (UTC)
Goto Top
Hm. Klingt merkwürdig. Ohne konkrete Dateien und Script natürlich schwer was zu sagen. Aus dem Bauch raus könnte man vermuten, dass Logdateien eventuell mehrfach gezählt werden, oder zuviele weil genau um 0 Uhr eine neue Logdatei dazu kommt.
Member: MarciMarc85
MarciMarc85 Feb 06, 2020 at 13:33:56 (UTC)
Goto Top
Das Script läuft alle 5 Min per Task. Den richtigen Wert zeigt es im Monitoring allerdings am Folgetag immer erst an, wenn ich es nochmal per Hand starte irgendwann im Laufe des Tages.