Mittwoch, August 17, 2016

Get-NtpTime , Powershell Funktion

Wie spät ist es eigentlich? Manchmal setzt die ntp- Abfrage einfach aus und die PC Zeit läuft so nach und nach hinterher, oder auf und davon. Also gelegentlich prüfen, z.B. mit folgender Funktion:
#ibjs.net 20160817 Abfragefunktion für NTP, Auswertung der deutschen w32tm Ausgabe
$NTP_Server=@("ptbtime1.ptb.de", "ptbtime2.ptb.de", "ptbtime3.ptb.de", `
"pool.ntp.org","europe.pool.ntp.org","de.pool.ntp.org ",`
"time-a.nist.gov","time-b.nist.gov ")
Function Get-NtpTime{
Param($Server)
If (! $Server){$Server="ptbtime1.ptb.de"}
$NTPResponse={(iex "w32tm /stripchart /computer:$Server /dataonly /samples:0")[2]}
$NTPTime={get-date([regex]::Replace("$(&$NTPResponse)","([\D\s]+)([\d\. :]+)\.",'$2'))}
&$NTPTime
}
$NTP_Server|%{"{0,-20}{1}" -f $_,(Get-NtpTime $_)}
view raw Get-NtpTime.ps1 hosted with ❤ by GitHub

Freitag, August 05, 2016

Hedda, wie spät ist es?

Zeitansage mit Powershell und passender Sprachdatei (bei Windows 7 nachrüsten):


#ibjs.net 20169806
Add-Type -AssemblyName System.speech
$Hedda=New-Object `
System.Speech.Synthesis.SpeechSynthesizer
$hedda.SelectVoice(`
($hedda.GetInstalledVoices().voiceinfo|?{$_.name -match "Hedda"}).name)
$GD=@'
$D=get-date
$S="Heute ist {0} der {1} {2} {3}. Es war gerade {4} Uhr und {5} Minuten und {6} Sekunden" -f `
$D.tostring("dddd"),$D.day,$D.tostring("MMMM"),$D.year,$D.hour,$D.minute,$D.second
$Hedda.speak($S)
'@
$Zeitansage={iex $GD}
&$Zeitansage
#Call Operator, Script Block, Invoke Expression und Here String in eier Reihe
view raw Zeitansage.ps1 hosted with ❤ by GitHub

Mittwoch, August 03, 2016

FritzBox Dialer mit Powershell

Diese Übung galt der Umstellung des FritzBox Wahlhilfe Scriptes fb_dial.vbs von Michael Engelke auf eine Powershell Variante.

#IBJS.net 20160803, in Anlehnung an fb_dial.vbs von Michael Engelke 2012
#Fritz!Box Wählhilfe mit Powershell von Joachim Schubert ibjs.net 2016
#Der Fritz-Box Benutzername für diesen Konstellation lautet NAS-Read
#Das encrypted Fritz-Box Passwort ist vorher in einer Datei Securestring.fb abzulegen.
#ConvertFrom-SecureString (read-host -AsSecureString -Prompt "Passwort ") >SecureString.fb
#Als Default Rufnummer nehme ich hier die Zeitansage der Telekom, die aber kostenpflichtig ist
#Alternativ nehme ich zum Testen eine interne Nummer wie **610, damit kann ich es zwar klingeln lassen,
#kann aber bisher die internen Gespräche nicht an das Wahlgerät **613 übergeben, es legt sofort auf.
#Zum Aufbau einer Verbindung lege ich eine sonst unbenutzte Festnetznummer auf das Zielgerät.
#Erprobung an Windows 7/ Powershell 5/ Gigaset A415 **613, Gigaset SL1 **610/ FritzBox 6360/Unity Media VoIP
#Die Übergabe des Anrufs erfolgt so:
#Das Script baut die Verbindung auf und zeigt es mit einem Rufzeichen= 3x Kammerton an.
#Sobald zu hören, am Wahlgerät die grüne Rufannahmetaste solange drücken, bis Wählhilfe Nummer am Display erscheint (ca. 1s)
#Das Rufzeichen ist am Wählgerät zu hören.
#
#Einbindung als Telefondienst per Registry:
#HKEY_CLASSES_ROOT\tel\shell\open\command
#[Reg_SZ]: "C:\WINDOWS\System32\WScript.exe" "C:\Windows\fb_dial.vbs" '%1' # altes vbs script wird nun ersetzt:
#[Reg_SZ]: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "C:\Windows\fb-dial.ps1" '%1'
#Dieses Script und SecureString.fb kommen nach C:\windows
#mit tel:01804100100 kann nun gewählt werden
#
Param([string]$Nummer="0180 4100100") #Zeitansage Telecom für 20 ct
#
function md5($text){
$md5 = New-Object System.Security.Cryptography.MD5CryptoServiceProvider
$md5.ComputeHash([Text.Encoding]::utf8.getbytes($text))|%{$HC=''}{$HC+=$_.tostring("x2")}{$HC}
}
#
#Achtung [string] im Parameter nicht vergessen sonst wird aus 0175… -> 175…
#und sie lernen einen Anschluss Ihrer Nachbarschaft kennen
#
Function dial([string]$Nummer){
if (!$Nummer){$Nummer="**610"}
#Nummernumwandlungfür Fritz in De, ohne Telefonanlage
$Nummer=([regex]::Replace($Nummer,"(?i)^tel:",""))
$Nummer=([regex]::Replace($Nummer,"^\+","00"))
$Nummer=[regex]::Replace($Nummer,"[^0-9*]","")
$Nummer=[regex]::Replace($Nummer,"0049","0")
$Password=get-content .\securestring.fb|ConvertTo-SecureString
$user="NAS-Read"
$hostfb="http://fritz.box" #$Host wird vom OS genutzt
$page_login= "/login_sid.lua"
$page_dial= "/fon_num/fonbook_list.lua?dial="+$Nummer+"&sid="
$page_logout="/fon_num/fonbook_list.lua?logout=1&sid="
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
$pass=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($Ptr)
$R1 = Invoke-WebRequest ($hostfb+$page_login)
$Challenge=([xml]$R1).sessioninfo.challenge
$Code1=$Challenge+"-"+$Pass
$Code2=[char[]]$Code1|%{$Code2=""}{$Code2+=$_+[Char]0}{$Code2}
$Response= "response=" + $Challenge + "-" + $(md5($Code2))
$Response+="&username="+$user #Response ist die Antwort auf die Challenge
$R2=Invoke-WebRequest -Uri ($hostfb+$page_login) -Method Post -Body $Response
$SID=([xml]($R2.Content)).ChildNodes.sid
$URiDial= $hostfb+$page_dial+$SID
$URILogout=$hostfb+$page_logout+$SID
$RequestCall=Invoke-WebRequest -Uri $URIDial
$RequestLogout=Invoke-WebRequest -Uri $URILogout
1..3|%{[console]::beep(440,1000);start-sleep(1)}
}
dial $Nummer
view raw fb-dial.ps1 hosted with ❤ by GitHub