|
#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 |
|
|