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.

Advertisement Blocker - InternetExplorer

Was tun?
Ich habe folgendes probiert:
1. Installation AdblockIE, nach nun 30 Tagen kam die anfangs nicht bemerkte Aufforderung zur Zahlung eines Betrages. -> Nicht akzeptabel
2. Installation eines anderen Browsers mit angeblich kostenlosen Werbeblockern. -> ok, aber nach Möglichkeit soll mein System minimalistisch bleiben, d.h. möglichst keine weitere Software zum OS
3. Installation der Open Source SW von AdblockPlus.org. ->ok, für IE ist Entwicklung. per Default gibt es ABP für Chrome, Opera, Firefox und Android. Die Frage ist, was steckt zusätzlich zu den IE Bordmitteln dahinter?
4. IE Bordmittel: //IE10/Extras/Internetoptionen/Programme/Add-Ons verwalten/Trackingschutz/Liste für den Tracking-Schutz online abrufen: z.B. von Adblockplus die Tracking Protection Lists easylist-msie und easylist-msie-Germany auswählen

Dienstag, August 06, 2013

VBS wscript, beep, Powershell

Problem
für ein umfangreiches vbs script soll eine akustische Meldung ergänzt werden, ohne große Umschreibung und Betriebssystem fremde Tools. Mit VBA könnte man mit

LPrivate Declare Function Beep Lib _
    "kernel32" (ByVal dwFreq As Long, _
    ByVal dwDuration As Long) As Long

auf kernel32.exe zugreifen und beep(Frequenz,Dauer) nutzen

Das geht aber nicht mit vbs.

Lösung
Wir nehmen Powershell hinzu und nutzen gleich noch das .net [console] Objekt.
Die folgenden Zeilen ergänzen das .vbs script und lassen es dreimal tuten.

set wshell = CreateObject("Wscript.shell")
wshell.run("c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe ""1..3|%{[console]::beep(440,1000);start-sleep(1)}""")