Mittwoch, August 07, 2013

Eieruhr mit Powershell

Es gibt offensichtlich mehrere Fallstricke, um einen Timer sekundengenau mit Powershell zu starten.
Hier die Vorgehensweise um den Timer für ein 6 Minutenei unter Windows 7 zu erstellen.

#130807 Eieruhr von https://ibjs.net #egg-timer
$schtasksdirname ="$env:temp/schtasks"
if ((gci $schtasksdirname 2>$null) -eq $null){mkdir $schtasksdirname}
#Info: Schtask /create /? Beschreibt das Format von /ST mit HH:mm
$st="{0:HH:mm}" -f [datetime]::Now.AddMinutes(6)
$stb="{0:yyyy-MM-ddTHH:mm:ss}" -f [datetime]::Now.AddMinutes(6)
Schtasks /create /F /tn Eieruhr /sc einmal /st $st /tr "Powershell.exe '1..3|%{[console]::beep(440,800);start-sleep -seconds 1.2}'"
schtasks /query /xml /tn Eieruhr > $schtasksdirname/Eieruhr.xml
$eieruhrxmlfile=gci $schtasksdirname/Eieruhr.xml
$eieruhrxml=Get-Content $eieruhrxmlfile
$eieruhrxml -replace "StartBoundary\>.+[<]{1}","StartBoundary>$stb<" >$eieruhrxmlfile
Schtasks /create /F /tn Eieruhr /xml $eieruhrxmlfile
#schtasks /delete /tn Eieruhr


Problem:
der Windows Taskmanager schtasks kennt als Starttime Format nur HH:mm. Wenn es dumm kommt, dann führen die fehlenden Sekunden zu einem zu weichen Ei.

Lösung:
  1. Scheduled  Tasks wird in Powershell angelegt, Name tn=Eieruhr, Starttime st=HH:mm,..., Aktion /tr=Powershell mit 3x Console Beep von Kammerton A
  2. Der angelegte Task wird mit /query /xml in das zuvor angelegte Verzeichnis $env:temp/schtasks gespeichert
  3. Dann wird in der XML Datei  die im Tag StartBoundary stehende Zeit durch $stb im sekunden genauen Format per -replace ersetzt
  4. Mit schtasks /create /F /tn Eieruhr /xml .... wird der Task Eieruhr überschrieben
  5. Nach 6 Minuten tutet es, dann die Eier herausnehmen.

Keine Kommentare: