Powershell: FritzBox über TR-064 im Netzwerk konfigurieren und auslesen

Inhaltsverzeichnis
Vorwort
Ich stand neulich vor der Aufgabe eine Fritzbox per Powershell auszulesen und Aktionen darüber automatisiert auszuführen. Herausgekommen ist ein Powershell-Modul das bestimmt dem ein oder anderen nützlich sein könnte.
Ich hatte dazu zwar schon einen Artikel für die Bash geschrieben, jedoch hat dieser das ganze Prozedere über das Webinterface realisiert was jedoch durch die ständigen Anpassungen seitens AVM nicht für dauerhafte Skripte geeignet und auch nicht sehr zuverlässig ist wenn zukünftige Updates auf der FritzBox gefahren werden.
Also habe ich das ganze nun mal mit der standardisierte Schnittstelle TR-064 umgesetzt welche die Fritzbox unterstützt. Die Abfragen laufen dort über standardisierte SOAP-Requests auf die uPnP Schnittstelle der Box (Port 49000/49443) ab.
Download des Powershell-Moduls: fritzbox_tr064_303474.zip
Nötige Voreinstellungen zur Nutzung der Schnittstelle
Damit die SOAP-Abfragen funktionieren, muss folgende Einstellung in der Fritzbox aktiviert sein:
Heimnetz > Heimnetzübersicht > Netzwerkeinstellungen > Zugriff für Anwendungen zulassen
Das Modul stellt im aktuellen Zustand noch nicht alle verfügbaren Funktionen zur Verfügung, jedoch einen breiten Satz über alle Möglichkeiten. Bei Bedarf können natürlich mit Studium der entsprechenden AVM-Dokumentation und der SOAP-XML-Beschreibungsdatei Funktionen leicht selbst nachgerüstet werden. Dazu schreibe ich später noch mehr.
Das Modul wurde mit einer FritzBox 7590 mit Firmware > 7.0 an einem DSL-Anschluss getestet (siehe Changelog weiter unten), sollte aber in der Regel auch mit älteren/neueren Firmware-Revisionen funktionieren sofern AVM keine grundlegenden Änderungen am TR-064 Protokoll oder den Parametern vornimmt.
Wichtige Informationen:
Wenn man mit dem Modul bestimmten Einstellungen des Routers verändern oder abrufen möchte, muss zwingend die 2-Faktor-Bestätigung (System > Fritz!Box-Benutzer > Zusätzliche Bestätigung) deaktiviert werden, da ansonsten die jeweilige Methode mit der Meldung "Ungültge Parameter (402)" fehl schlägt!
Das Modul funktioniert nur im internen Netz der Fritzbox, also nicht über den WAN-Port!
Momentan enthaltene Funktionen
Basis-Informationen
- Get-FBInfo : Basisinformationen und letzte Logeinträge abrufen
- Get-FBWANStatistics : WAN Statistik anzeigen (Bytes/Pakete gesendet/empfangen)
- Get-FBWANDSLInterfaceConfig : DSL Leitungsdaten abfragen (Internet > DSL-Informationen > DSL [Ausgehandelte Verbindungseigenschaften])
- Get-FBWANDSLInterfaceStatistics : DSL Leitungsstatistik abfragen (Internet > DSL-Informationen > DSL [Fehlerzähler])
- Get-FBWANDSLSpectrumData : DSL Spektrum Daten abfragen (Internet > DSL-Informationen > Spektrum)
Verbindungen
- Invoke-FBReboot : Fritzbox neu starten
- Invoke-FBDSLDisconnect : DSL-Verbindung trennen
Portfreigaben
- Get-FBPortMappings : Portfreigaben auslesen
- Add-FBPortMapping : Portfreigabe erstellen.
- Remove-FBPortMapping : Portfreigaben löschen. Achtung: Aktuell in Firmware Versionen 7.27/7.28 wegen Bug in der AVM-Firmware nicht funktionsfähig
Telefonie-Funktion
- Get-FBCallList : Ruft die detaillierte Anruferliste ab.
- Invoke-FBDialNumber : Eine Rufnummer mit Hilfe der Wählhilfe anwählen
- Set-FBDialHelperFunction : Aktiviert oder Deaktiviert die Wählhilfe für ein bestimmtes Endgerät
- Disconnect-FBCall : Anruf über die Wählhilfe vorzeitig beenden
- Get-FBPhoneBooks : Liste der Telefonbücher abrufen
- Update-FBPhonebook : Online Telefonbücher aktualisieren
- Get-FBPhoneBookEntries : Kontakte eines Telefonbuchs auslesen
- Add-FBPhonebookEntry : Kontakt zum Telefonbuch hinzufügen
- Update-FBPhoneBookEntry : Kontakte eines Telefonbuchs ändern
- Remove-FBPhoneBookEntry : Kontakt eines Telefonbuchs löschen
- Export-FBPhoneBook : Telefonbuch in verschiedenen Formaten speichern, zur Zeit als XML und CSV (Outlook Import kompatibel)
- Get-FBCallDeflections : Alle Rufumleitungen auflisten
- Get-FBCallDeflection : bestimmte Rufumleitung anhand Ihrer ID abfragen
- Switch-FBCallDeflection : De-/aktivieren einer Rufumleitung
- Get-FBTAMList : Anrufbeantworter auflisten
- Get-FBTAMInfo : Details eines Anrufbeantworters anzeigen
- Enable-FBTAM : Anrufbeantworter einschalten
- Disable-FBTAM : Anrufbeantworter ausschalten
- Get-FBTAMMessageList : Anzeigen von Nachrichten eines Anrufbeantworters / Speichern als WAV-Datei
- Set-FBTAMMarkMessage : Nachrichten eines Anrufbeantworters als gelesen/ungelesen markieren
- Remove-FBTAMMessage : Löschen von Nachrichten eines Anrufbeantworters
Netzwerk
- Get-FBHostList : Liste der Hosts im Netzwerk abfragen, optional inkl. DHCP-Leaseinfo
- Get-FBStaticRoutes : Auflisten der statischen Routen
- Get-FBStaticRoute : Abfragen bestimmter statischer Routen
- Enable-FBStaticRoute : Statische Route aktivieren
- Disable-FBStaticRoute : Statische Route deaktivieren
- Add-FBStaticRoute : Statische Route hinzufügen
- Remove-FBStaticRoute : Statische Route entfernen
Wifi
- Switch-FBWifiInterface : Bestimmtes Wifi-Interface ein-/ausschalten
- Get-FBWifiInterfaceInfo : Informationen über Wifi-Interfaces ausgeben
- Switch-FBWifi : Wifi global ein- oder ausschalten (so wie wenn man den Wifi-Button am Gerät betätigt)
- Get-FBWifiWPSInfo : WPS Status abfragen
- Set-FBWifiWPSConfig : WPS starten/stoppen (PushButton/Stop running WPS Session/WPS deaktivieren)
- Set-FBWifiWPSStatus : WPS de-/aktivieren
- Get-FBWifiNightControl : Wifi Nachtschaltfunktion auslesen
- Get-FBWifiConnectedDevicesAsXML : Informationen über alle Verbundenen Wifi-Clients als XML Objekt ausgeben
- Set-FBWifiInterfaceChannel : WLAN Kanal für ein Wifi-Interface festlegen
- Get-FBWifiPresharedKey : PSK für Wifi-Interface auslesen
- Set-FBWifiPresharedKey : PSK für Wifi-Interface setzen
Speicherfunktionen SMB/FTP
- Get-FBStorageConfig : Status der SMB/FTP Funktionen ausgeben
- Enable-FBFTPServer : FTP-Server für LAN/WAN aktivieren
- Disable-FBFTPServer : FTP-Server für LAN/WAN deaktivieren
- Enable-FBSmbServer : SMB-Server aktivieren
- Disable-FBSmbServer : SMB-Server deaktivieren
- Set-FBftpuserConfig : Konfiguration des speziellen 'ftpuser' Kontos modifizieren
- Get-FBOnlineStorage : Online-Speicher Konfiguration anzeigen (TR-064 Funktion zum Ändern dieser zur Zeit leider nicht funktionsfähig(Firmware-Bug?)
Kindersicherung (WAN-Zugangsfilter)
- Get-FBWANAccessByIP : WAN Zugangsstatus für IP abfragen
- Enable-FBWANAccessByIP : WAN Zugang erlauben
- Disable-FBWANAccessByIP : WAN Zugang sperren
- Set-FBDiscardAllTickets : Ein neues Set an Zugangstickets generieren
- Get-FBTicketIDStatus : Status eines Tickets abfragen
- Set-FBMarkTicket : Ticket als ungültig markieren
Remote-Zugriff / Dynamic-DNS (DDNS) / Zertifikate
- Get-FBRemoteAccessUsers : Liste mit Usern ausgeben die für den Remote-Zugriff aktiviert wurden
- Enable-FBRemoteAccess : Remote-Zugriff per HTTPS aktivieren
- Disable-FBRemoteAccess : Remote-Zugriff per HTTPS deaktivieren
- Get-FBDDNSInfo : Konfigurationsoptionen für DDNS Dienst anzeigen
- Get-FBDDNSProviders : Unterstützte Dynamic-DNS Provider anzeigen
- Set-FBDDNSConfig : Dynamic-DNS Konfigurations-Optionen und Dienst an- oder abschalten
- Update-FBCertificate : Benutzerdefiniertes Zertifikat (*.pem) in die Fritzbox importieren
TR069 ACS-Management Verwaltung
- Get-FBManagementSettings : Aktuell gesetzte Management-Server Einstellungen abrufen
- Set-FBManagementSettings : Sämtliche Management-Server Einstellungen festlegen (ServerURL,ServerCredentials,ConnectionCredentials,FirmwareDownload,ManagementUpgrades,InformIntervalSettings)
- Reset-FBManagementSettings Management deaktivieren / zurücksetzen
Erläuterungen zur praktischen Nutzung
Einbinden des Moduls
Um das Modul in einer beliebigen Powershell-Session zu nutzen, muss dieses als erstes importiert werden. Das geschieht mit folgendem Befehl (Parameter -verbose ist optional):
Import-Module "C:\Pfad\zum\Modul\fritzbox_module" -verbose
Alternativ kann man das Modul natürlich wie gehabt auch in die systemweit nutzbaren Modulverzeichnisse kopieren, dann erübrigt sie das manuelle Importieren über Import-Module.
Die Verzeichnisse in denen man das Modul platzieren kann sind über die Globale Variable $env:PSModulePath abrufbar. Der Inhalt des Moduls muss dann nur in einen der aufgeführten Ordner kopiert werden.
Die Informationen zur Nutzung des Moduls sind auch in der Zip-Datei des Moduls in der Datei readme.txt enthalten.
Erster Aufruf vor der Nutzung der spezifischen Funktionen
Bevor eine der bereitgestellten CMDLets des Moduls genutzt werden kann muss das CMDLet Connect-Fritzbox mit Hostname bzw. FQDN, Benutzername und Passwort als Parametern aufgerufen werden. Dieses initialisiert die Variablen für die folgenden Aufrufe der anderen CMDLets. Wird dies nicht getan werfen die CMDLets aber auch einen Hinweise darauf.
Der Aufruf sieht bspw. so aus
Connect-Fritzbox -fqdn 'fritz.box' -username 'maxmuster' -password 'SeCrEt'
Danach lassen sich die nachfolgend aufgeführten CMDLets aufrufen. Diese nutzen dann für die Verbindung alle diese angegebenen Zugangsdaten.
Möchte man sich einen Überblick verschaffen welche CMDLets das Modul bietet führt man dazu folgendes nach dem Import des Moduls aus
Get-Command -Module fritzbox_module
Zu jeder Funktion sind Beispiele und Informationen zur Nutzung in der Synopsis oberhalb jeder Funktion hinterlegt. Diese lassen sich entweder direkt im Modul-Code nachlesen oder man nutzt die Powershell-Eigenen Hilfsfunktionen.
Beispiel um die Hilfe für das CMDLet Connect-Fritzbox anzuzeigen
Get-Help Connect-Fritzbox -full
Hinweise und Links für Entwickler die die Funktionalität selbst erweitern möchten.
Dokumentation zur TR-064 Schnittstelle
Die Dokumentation zu der TR-064 Schnittstelle und die Dienstbeschreibungen mit den nötigen Parametern findet sich hier:http://avm.de/service/schnittstellen/
Die XML-Datei welche die SOAP-Servicebeschreibungen der eigenen Fritzbox auflistet kann man auf seiner eigenen Fritzbox unter http://fritz.box:49000/tr64desc.xml abrufen.
Dort finden sich dann Abschnitte mit dem XML-Tag Service.
Beispiel:
<service>
<serviceType>urn:dslforum-org:service:DeviceConfig:1</serviceType>
<serviceId>urn:DeviceConfig-com:serviceId:DeviceConfig1</serviceId>
<controlURL>/upnp/control/deviceconfig</controlURL>
<eventSubURL>/upnp/control/deviceconfig</eventSubURL>
<SCPDURL>/deviceconfigSCPD.xml</SCPDURL>
</service>
Ruft man diese XML-Datei ab, findet man darin die Aktionen die man für diese Kategorie ausführen kann.
Beispiel hier die Aktion zum Zurücksetzen auf die Werkseinstellungen:
<action>
<name>FactoryReset</name>
</action>
Je nachdem welche und ob die Funktion Übergabe-Parameter erwartet, steht ebenfalls in den PDF-Dokumentationen zu den jeweiligen Funktionen bei AVM. Muss man Parameter im SOAP-Request mit übergeben sind diese mit [IN] gekennzeichnet. Parameter die mit [OUT] gekennzeichnet sind werden bei der Antwort ausgegeben, diese muss man der Funktion also nicht übergeben.
Mit diesen Informationen ist also nicht sehr schwierig auch andere Funktionen der Fritzbox anzusprechen oder entsprechende Infos abzurufen.
Solltet Ihr Interesse an weiteren spezifischen Funktionen haben kann ich Zug um Zug weitere Funktionen nachreichen und in das Modul einbauen wenn Ihr mir dies mit einer Bitte in die Kommentare schreibt. Ich werde diese dann Zeitnah nachreichen.
Hoffe das hilft dem ein oder anderen bei seinem Projekt.
Wie immer sind alle Angaben ohne Gewähr und die Benutzung geschieht auf eigene Gefahr.
Gruß @colinardo
Changelog:
Version 1.1.3 (29.03.2022)
- Fix: Variablenfehler in der Funktion Get-FBWifiConnectedDevicesAsXML behoben, Funktion Get-FBWANStatistics hinzugefügt.
Version 1.1.2 (21.03.2022)
- + Telefonbuch Export-Funktion konsolidiert und umbenannt in Export-FBPhonebook, umfasst jetzt den wahlweisen Export in XML oder CSV (Outlook kompatibel)
- Fix: Ausgabe-Encoding der Funktion Get-FBTamMessageList korrigiert.
- Die Funktion Get-FBTamMessageList um eine Script-Methode erweitert die den Download der hinterlassenen Nachrichten als WAV-Datei ermöglicht.
Version 1.1.1 (16.03.2022)
- + 3 Funktionen zur Verwaltung der Telefonbücher hinzugefügt und aktualisiert
Version 1.1.0 (02.03.2022)
- + 3 Funktionen zur Verwaltung der TR069 ACS-Management Einstellungen hinzugefügt
Version 1.0.9 (28.02.2022)
- Fix: SSL-Problem unter Powershell Version 7 behoben
Version 1.0.8 (19.02.2022)
- + Werte der Funktion Get-FBCallList optimiert und zwei Ausgabeformate hinzugefügt um Einträge gruppiert nach Monaten und Nummern als Tabelle auszugeben.
Version 1.0.7 (18.01.2022)
- + Funktion um die Live-Daten des DSL-Spektrums abzufragen, hinzugefügt => Get-FBWANDSLSpectrumData.
Version 1.0.6 (15.01.2022)
- + Funktion um ein benutzerdefiniertes Zertifikat in die Fritzbox zu importieren hinzugefügt => Update-FBCertificate .
Version 1.0.5 (12.01.2022)
- + Die Funktion Get-FBHostList um einen zusätzlichen Parameter zur Abfrage der DHCP-Lease Informationen ergänzt.
Version 1.0.4 (09.11.2021)
- + 6 Funktionen für Remote-Zugriff/Dynamic-DNS hinzugefügt.
- Fix: Ausgaben der Portmapping-Funktionen optimiert.
Version 1.0.3 (08.11.2021)
- + 6 Funktionen zur Kindersicherung und WAN Zugangsfilter hinzugefügt
Version 1.0.2 (06.11.2021)
- + 7 Funktionen zum Verwalten von SMB/FTP Server und Online-Speicher hinzugefügt
- + 7 Funktionen zum Verwalten der Anrufbeantworter und deren Nachrichten hinzugefügt
- + 6 Funktionen zum Verwalten der statischen Routen hinzugefügt
- + Kompatibilität mit Fritz!OS 7.29 überprüft
Version 1.0.1 (05.11.2021)
- + Funktion zum Abfragen der Hosts im Netzwerk hinzugefügt
- Fix: 03.11.2021 : Die Portmapping-Funktionen korrigiert damit diese auch andere WAN-Typen unterstützt
Version 1.0.0 (14.10.2021)
- + Umwandlung des Skripts in ein echtes Powershell-Modul zur einfacheren Nutzung
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 303474
Url: https://administrator.de/contentid/303474
Ausgedruckt am: 06.07.2022 um 20:07 Uhr
120 Kommentare
Neuester Kommentar
Hallo Uwe,
auch ich kenne mich mit Powershell nicht aus, aber dank Deiner ausführlichen Darstellungen läuft Dein Script. Leider hat es keine Funktion, die eine Abfrage an die FB erlaubt, ob ein USB-Gerät (nicht über Fernanschluss) angeschlossen ist bzw. bereits ist. Ist sowas überhaupt machbar? Wenn ja, kann man die Infos in eine Datei schreiben lassen?
auch ich kenne mich mit Powershell nicht aus, aber dank Deiner ausführlichen Darstellungen läuft Dein Script. Leider hat es keine Funktion, die eine Abfrage an die FB erlaubt, ob ein USB-Gerät (nicht über Fernanschluss) angeschlossen ist bzw. bereits ist. Ist sowas überhaupt machbar? Wenn ja, kann man die Infos in eine Datei schreiben lassen?
Vielen Dank für Deine Mühen, leider funktioniert das Script nicht (löst einen Haufen Fehler aus:
powershell.exe : Invoke-WebRequest : FRITZ!BoxDie angegebene URL wurde nicht gefunden. Sie
In Zeile:1 Zeichen:1
+ CategoryInfo : NotSpecified: (Invoke-WebReque... gefunden. Sie :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
werden auf die Startseite der FRITZ!Box weitergeleitet.Falls Sie nicht
automatisch auf die Startseite der FRITZ!Box weitergeleitet werden, klicken
Sie hier.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:25 Zeichen:10
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt
pWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe
ll.Commands.InvokeWebRequestCommand
Fehler beim Aufrufen der Methode, da [System.__ComObject] keine Methode mit
dem Namen "IHTMLDocument2_write" enth„lt.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:35 Zeichen:1
+ CategoryInfo : InvalidOperation: (IHTMLDocument2_write:String)
[], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
irm : Ungltiger URI: Der Hostname konnte nicht analysiert werden.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:11 Zeichen:12
"app ...
~~~
+ CategoryInfo : NotSpecified: (
[Invoke-RestMethod], UriFormat
Exception
+ FullyQualifiedErrorId : System.UriFormatException,Microsoft.PowerShell.C
ommands.InvokeRestMethodCommand
.... wobei ich als URL der FB die IP angegeben habe, weil auch in Firefox der Name nicht mehr aufgelöst wird seit Neuem. Dies klappt auch im ersten Script. Ich nutze die FB 7270 V2 (UI) mit der FW 54.06.06. Ich nehme an es liegt daran, wie Du auch angedeutet hast. Wo muss ich suchen, um den richtigen Code für meine Box zu finden.
Grüße
Selfer
powershell.exe : Invoke-WebRequest : FRITZ!BoxDie angegebene URL wurde nicht gefunden. Sie
In Zeile:1 Zeichen:1
powershell.exe -ExecutionPolicy Bypass -File C:\Users\Hubert\Desktop\nw-abfrage. ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Invoke-WebReque... gefunden. Sie :String) [], RemoteException+ FullyQualifiedErrorId : NativeCommandError
werden auf die Startseite der FRITZ!Box weitergeleitet.Falls Sie nicht
automatisch auf die Startseite der FRITZ!Box weitergeleitet werden, klicken
Sie hier.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:25 Zeichen:10
$r = Invoke-WebRequest -Uri $url -Body $body -Method Get
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt pWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe
ll.Commands.InvokeWebRequestCommand
Fehler beim Aufrufen der Methode, da [System.__ComObject] keine Methode mit
dem Namen "IHTMLDocument2_write" enth„lt.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:35 Zeichen:1
$dom.IHTMLDocument2_write($table)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (IHTMLDocument2_write:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
irm : Ungltiger URI: Der Hostname konnte nicht analysiert werden.
In C:\Users\Hubert\Desktop\nw-abfrage.ps1:11 Zeichen:12
$xml = irm -Uri "$url/login_sid.lua" -SessionVariable sess -ContentType
"app ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~+ CategoryInfo : NotSpecified: (
Exception
+ FullyQualifiedErrorId : System.UriFormatException,Microsoft.PowerShell.C
ommands.InvokeRestMethodCommand
.... wobei ich als URL der FB die IP angegeben habe, weil auch in Firefox der Name nicht mehr aufgelöst wird seit Neuem. Dies klappt auch im ersten Script. Ich nutze die FB 7270 V2 (UI) mit der FW 54.06.06. Ich nehme an es liegt daran, wie Du auch angedeutet hast. Wo muss ich suchen, um den richtigen Code für meine Box zu finden.
Grüße
Selfer
Zitat von @colinardo:
Bitte habe Verständnis das ich für die out of date Firmwares hier keinen kostenlosen Support bieten kann.
Bitte habe Verständnis das ich für die out of date Firmwares hier keinen kostenlosen Support bieten kann.
Selbst für aktuelle Firmwares kostenlosen Support zu erwarten ist etwas gewagt.
lks
Hallo colinardo
Seit längerer Zeit bin ich auf der Suche nach einer Möglichkeit, mit einem Script auf einem Windows-Rechner einen Telefonbeantworter auf der FritzBox beeinflussen zu können. Scripte im Zusammenhang mit der FritzBox habe ich schon einige gefunden. Bislang scheiterte es daran, dass ich nicht herausgefunden habe, was ich mit diesen wo anstellten sollte.....
Mit Deinem Script und den Tipps konnte ich zumindest bereits eine Reaktion erreichen.
Weisst Du, was ich an Deinem Script anpassen müsste, um die Delay-Zeit des Beantworters 1 beeinflussen zu können? Ich möchte zwischen 0 und 35 Sekunden wechseln können.
Besten Dank für Deinen Ratschlag schon im Voraus und liebe Grüsse aus der Schweiz.
voumi70
Seit längerer Zeit bin ich auf der Suche nach einer Möglichkeit, mit einem Script auf einem Windows-Rechner einen Telefonbeantworter auf der FritzBox beeinflussen zu können. Scripte im Zusammenhang mit der FritzBox habe ich schon einige gefunden. Bislang scheiterte es daran, dass ich nicht herausgefunden habe, was ich mit diesen wo anstellten sollte.....
Mit Deinem Script und den Tipps konnte ich zumindest bereits eine Reaktion erreichen.
Weisst Du, was ich an Deinem Script anpassen müsste, um die Delay-Zeit des Beantworters 1 beeinflussen zu können? Ich möchte zwischen 0 und 35 Sekunden wechseln können.
Besten Dank für Deinen Ratschlag schon im Voraus und liebe Grüsse aus der Schweiz.
voumi70
Sehr geiler Beitrag, ab neueren OS geht ja telnet so ohne weiteres nicht mehr, brauchte was um WLAN einzuschalten.
Ich habe den Aufruf etwas vereinfacht, so ist es m.E. einfacher mit der XML-Beschreibung von http://fritz.box:49000/tr64desc.xml bzw Unterseiten klarzukommen.
Die urn wird übergeben, die Action und die Argumente der Action als Hashtable.
Unten sind Beispiele für WLAN ein, WLAN aus und GetInfo
Bis die WLAN Befehle im UI sichtbar sind dauert es immer etwas (max 20 Sekunden).
Habe es mit der 7412 getestet.
Kann sein, dass es nicht mit allen Actions geht, habe nur die zwei getestet.
Ich habe den Aufruf etwas vereinfacht, so ist es m.E. einfacher mit der XML-Beschreibung von http://fritz.box:49000/tr64desc.xml bzw Unterseiten klarzukommen.
Die urn wird übergeben, die Action und die Argumente der Action als Hashtable.
Unten sind Beispiele für WLAN ein, WLAN aus und GetInfo
Bis die WLAN Befehle im UI sichtbar sind dauert es immer etwas (max 20 Sekunden).
Habe es mit der 7412 getestet.
Kann sein, dass es nicht mit allen Actions geht, habe nur die zwei getestet.
function Get-Soaprequest {
Param ($urn,$action,$arguments = @{})
# Service auslesen
$service = $serviceinfo.SelectNodes('//ns:service',$ns)| ? {$_.ServiceType -eq $urn}
# passenden Body Request-Tag ins XML einfügen
$actiontag = $script:request.CreateElement('u',$action,$service.serviceType)
foreach ($key in $arguments.keys) {
$parameter = $script:request.CreateElement($key)
$parameter.innerText = $arguments.$key
$actiontag.AppendChild($parameter) | out-null
}
$script:request.GetElementsByTagName('s:Body')[0].AppendChild($actiontag) | out-null
# Initialer Request
$resp = Execute-SOAPRequest $script:request "$($service.serviceType)#$($action)" "$($FB_URL):49000$($service.controlURL)"
# Authentifizierungsdaten setzen
SetAuthInfo $resp
# Request mit Authentifizierung abschicken
$resp = Execute-SOAPRequest $script:request "$($service.serviceType)#$($action)" "$($FB_URL):49000$($service.controlURL)"
return $resp.Envelope.Body
}
#$resp = Get-Soaprequest "urn:dslforum-org:service:WLANConfiguration:1" "SetEnable" @{NewEnable = 1}
$resp = Get-Soaprequest "urn:dslforum-org:service:WLANConfiguration:1" "SetEnable" @{NewEnable = 0}
#$resp = Get-Soaprequest "urn:dslforum-org:service:DeviceInfo:1" "GetInfo"
$resp
$resp.GetInfoResponse
Hallo Colinardo,
vielen Dank für das umfangreiche Script und Deine Arbeit.
Ich möchte die Anrufliste aus der Fritzbox auslesen und alle Einträge dabei bekommen
(nicht die üblichen 400).
Obwohl in Deinem Script die erforderlichen Parameter stehen, kommen als Antwort immer
nur die letzten 400 Anrufe.
In der xml-Datei steht der Parameter calls:400. Wenn ich das als zusätzlichen Parameter
einfüge ändert sich nichts.
Weißt Du ob das das hart codiert ist oder wie man das ändern kann?
Danke
vielen Dank für das umfangreiche Script und Deine Arbeit.
Ich möchte die Anrufliste aus der Fritzbox auslesen und alle Einträge dabei bekommen
(nicht die üblichen 400).
Obwohl in Deinem Script die erforderlichen Parameter stehen, kommen als Antwort immer
nur die letzten 400 Anrufe.
In der xml-Datei steht der Parameter calls:400. Wenn ich das als zusätzlichen Parameter
einfüge ändert sich nichts.
Weißt Du ob das das hart codiert ist oder wie man das ändern kann?
Danke
Hallo,
Bau mehr RAM ein und erweiter die Firmware dann kannst du die 1200000 getätigten Anrufe auch im LOG sehen
Oder AVM fragen warum die immer nur von max. 400 Einträge sprechen... 
Gruß,
Peter
Bau mehr RAM ein und erweiter die Firmware dann kannst du die 1200000 getätigten Anrufe auch im LOG sehen
Gruß,
Peter
Hallo colinardo,
schönes Script. Danke.
Ich würde gerne mit dem Script eine Portweiterleitung einrichten. Leider waren wir bisher nicht erfolgreich.
Ich kann bei der Fritzbox 6490 (Cable) alles auslesen, aber nichts schreiben.
Es kommt immer die FM "Invalid Args"
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
Was mache ich falsch?
PS:
Um das Script bequem mehrfach hintereinander aus der Powershell ISE ausführen zu können, habe ich die Funktion InitRequest() eingebaut und rufe sie vor jedem Kommando auf.
[xml]$script:request = @"
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Header>
<h:ClientAuth xmlns:h="http://soap-authentication.org/digest/2001/10/" s:mustUnderstand="1">
<Nonce></Nonce>
<Auth></Auth>
<UserID></UserID>
<Realm></Realm>
</h:ClientAuth>
</s:Header>
<s:Body>
</s:Body>
</s:Envelope>
"@
}
Gruß CAREOLINE
schönes Script. Danke.
Ich würde gerne mit dem Script eine Portweiterleitung einrichten. Leider waren wir bisher nicht erfolgreich.
Ich kann bei der Fritzbox 6490 (Cable) alles auslesen, aber nichts schreiben.
Es kommt immer die FM "Invalid Args"
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
Was mache ich falsch?
PS:
Um das Script bequem mehrfach hintereinander aus der Powershell ISE ausführen zu können, habe ich die Funktion InitRequest() eingebaut und rufe sie vor jedem Kommando auf.
- Request XML vorbereiten
[xml]$script:request = @"
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Header>
<h:ClientAuth xmlns:h="http://soap-authentication.org/digest/2001/10/" s:mustUnderstand="1">
<Nonce></Nonce>
<Auth></Auth>
<UserID></UserID>
<Realm></Realm>
</h:ClientAuth>
</s:Header>
<s:Body>
</s:Body>
</s:Envelope>
"@
}
Gruß CAREOLINE
Hi,
gibt es das auch als bash script? Oder zumindest die Portfreigabe?
Ich hätte gerne ein Script das ich auf meiner NAS ausführen kann und einen Port öffnet bzw. wieder löscht. Habe leider nur das HIER gefunden aber das ist nur für einen reboot der Box und ich weiß nicht wie die Parameter angepasst werden müssten. Jemand eine Idee?
gibt es das auch als bash script? Oder zumindest die Portfreigabe?
Ich hätte gerne ein Script das ich auf meiner NAS ausführen kann und einen Port öffnet bzw. wieder löscht. Habe leider nur das HIER gefunden aber das ist nur für einen reboot der Box und ich weiß nicht wie die Parameter angepasst werden müssten. Jemand eine Idee?
Hi,
danke. Und die Parameter habe ich gesehen und ich habe mir auch die Doku von AVM angeguckt aber nie ist irgendwo mal ein kompletter Link zur Portfreigabe zu finden. Wie hänge ich denn die einzelnen Parameter an den Link? Ich habe das Script schonmal angepasst, aber irgendwo muss ich ja jetzt die Parameter inzufügen mit tüttelchen und so^^
danke. Und die Parameter habe ich gesehen und ich habe mir auch die Doku von AVM angeguckt aber nie ist irgendwo mal ein kompletter Link zur Portfreigabe zu finden. Wie hänge ich denn die einzelnen Parameter an den Link? Ich habe das Script schonmal angepasst, aber irgendwo muss ich ja jetzt die Parameter inzufügen mit tüttelchen und so^^
###=======###
# Variablen #
###=======###
IPS="192.168.178.1"
FRITZUSER=""
FRITZPW="geheim"
###====###
# Skript #
###====###
location="/upnp/control/wanpppconn1"
uri="dslforum-org:service:WANPPPConnection:1"
action='AddPortMapping'
for IP in ${IPS}; do
curl -k -m 5 --anyauth -u "$FRITZUSER:$FRITZPW" http://$IP:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope>" -s > /dev/null
done
Super danke, allerdings bekomme ich diese Fehlermeldung:
Dachte es liegt an dem von dir beschriebenen Problem mit den Portfreigaben aber die Fehlermeldung ist anders als die weiter oben und es funktioniert auch nach 10-15 mal nicht. Das Standard Script mit dem Reboot funktioniert, also der Zugang funktioniert auf jeden Fall.
Hier das komplette script:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
<errorCode>401</errorCode>
<errorDescription>Invalid Action</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
Dachte es liegt an dem von dir beschriebenen Problem mit den Portfreigaben aber die Fehlermeldung ist anders als die weiter oben und es funktioniert auch nach 10-15 mal nicht. Das Standard Script mit dem Reboot funktioniert, also der Zugang funktioniert auf jeden Fall.
Hier das komplette script:
###=======###
# Variablen #
###=======###
IPS="192.168.178.1"
FRITZUSER=""
FRITZPW="geheim"
###====###
# Skript #
###====###
location="/upnp/control/wanpppconn1"
uri="dslforum-org:service:WANPPPConnection:1"
action='AddPortMapping'
for IP in ${IPS}; do
curl -k -m 5 --anyauth -u "$FRITZUSER:$FRITZPW" http://$IP:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'><NewRemoteHost>0.0.0.0</NewRemoteHost><NewLeaseDuration>0</NewLeaseDuration><NewEnabled>1</NewEnabled><NewInternalClient>192.168.178.100</NewInternalClient><NewExternalPort>54321</NewExternalPort><NewProtocol>TCP</NewProtocol><NewInternalPort>54321</NewInternalPort><NewPortMappingDescription>Testmapping</NewPortMappingDescription></u:$action></s:Body></s:Envelope>" -s
done
Hi,
kleiner Fehler in Zeile 134.
besser:
Ansonsten funktioniert das Script mit einer 7412 (1&1, FRITZ!OS 06.85) gut, Add-FBPortMapping funktioniert beim ersten Aufruf.
Gruß
Sam
kleiner Fehler in Zeile 134.
$resp = New-Request -urn 'urn:dslforum-org:service:WANPPPConnection:1' -action 'GetPortMappingNumberOfEntries'
[int]$cnt = $result.Envelope.Body.GetPortMappingNumberOfEntriesResponse.NewPortMappingNumberOfEntries
besser:
$result = New-Request -urn 'urn:dslforum-org:service:WANPPPConnection:1' -action 'GetPortMappingNumberOfEntries'
[int]$cnt = $result.Envelope.Body.GetPortMappingNumberOfEntriesResponse.NewPortMappingNumberOfEntries
Ansonsten funktioniert das Script mit einer 7412 (1&1, FRITZ!OS 06.85) gut, Add-FBPortMapping funktioniert beim ersten Aufruf.
Gruß
Sam
Moin
Ist ja schön das hier in den Kommentaren immer noch so viel Aktivität ist, und das der Autor noch aktiv antwortet. Danke mal für das grundsätzliche Skript.
Ich wollte mal versuchen das ganze ein wenig für meine Fälle zu erweitern, habe aber ein syntaktisches Problem bei einem AVM spezifischen Value aus dem URN.
Rufe ich die http://fritz.box:49000//hostsSCPD.xml für die URN urn:dslforum-org:service:Hosts:1 ab, so kann ich z.B. die action X_AVM-DE_GetMeshListPath abfragen.
Blöderweise motzt mir das Skript dann rum wenn ich folgenden Request absetzen will:
Schon der Syntax von
wird mir in der IDE nicht korrekt angezeigt und das Skript bringt auch prompt einen Fehler.
In D:\Skripte_Programmierung\FB_Powershellzugriff.ps1:209 Zeichen:37
Unerwartetes Token "-DE" in Ausdruck oder Anweisung.
In D:\Skripte_Programmierung\FB_Powershellzugriff.ps1:209 Zeichen:40
Unerwartetes Token "_GetMeshListPathResponse" in Ausdruck oder Anweisung.
+ CategoryInfo : ParserError: (
[], ParseException
+ FullyQualifiedErrorId : UnexpectedToken
Syntaktisch ist der Bindestrich wahrscheinlich eher der Powershell zuzurechnen, weswegen auch der Fehler kommt, aber wie könnte ich das beheben? in der Funktion New-Request sehe ich dafür auf die schnelle keine Möglichkeit.
Wäre cool, wenn da jemand einen Tipp dazu hätte.
Grüße
Daimonion
Ist ja schön das hier in den Kommentaren immer noch so viel Aktivität ist, und das der Autor noch aktiv antwortet. Danke mal für das grundsätzliche Skript.
Ich wollte mal versuchen das ganze ein wenig für meine Fälle zu erweitern, habe aber ein syntaktisches Problem bei einem AVM spezifischen Value aus dem URN.
Rufe ich die http://fritz.box:49000//hostsSCPD.xml für die URN urn:dslforum-org:service:Hosts:1 ab, so kann ich z.B. die action X_AVM-DE_GetMeshListPath abfragen.
Blöderweise motzt mir das Skript dann rum wenn ich folgenden Request absetzen will:
function Get-FBLanMesh(){
$resp = New-Request -urn 'urn:dslforum-org:service:Hosts:1' -action 'X_AVM-DE_GetMeshListPath'
return $resp.Envelope.body.X_AVM-DE_GetMeshListPathResponse
}
Schon der Syntax von
return $resp.Envelope.body.X_AVM-DE_GetMeshListPathResponse
wird mir in der IDE nicht korrekt angezeigt und das Skript bringt auch prompt einen Fehler.
In D:\Skripte_Programmierung\FB_Powershellzugriff.ps1:209 Zeichen:37
return $resp.Envelope.body.X_AVM-DE_GetMeshListPathResponse
~~~
Unerwartetes Token "-DE" in Ausdruck oder Anweisung.In D:\Skripte_Programmierung\FB_Powershellzugriff.ps1:209 Zeichen:40
return $resp.Envelope.body.X_AVM-DE_GetMeshListPathResponse
~~~~~~~~~~~~~~~~~~~~~~~~
Unerwartetes Token "_GetMeshListPathResponse" in Ausdruck oder Anweisung.+ CategoryInfo : ParserError: (
+ FullyQualifiedErrorId : UnexpectedToken
Syntaktisch ist der Bindestrich wahrscheinlich eher der Powershell zuzurechnen, weswegen auch der Fehler kommt, aber wie könnte ich das beheben? in der Funktion New-Request sehe ich dafür auf die schnelle keine Möglichkeit.
Wäre cool, wenn da jemand einen Tipp dazu hätte.
Grüße
Daimonion
Hi,
hat sich für Linux auch etwas geändert? Ich habe mittlerweile eine 7590 und habe dieses Script:
Aber sowohl bei diesem als auch bei dem oberen bei dem das Script auf eine seperate xml Datei zugreift kommt immer diese Fehlermeldung:
Hast du da eine Idee? Auch den Befehl 10-15 mal auszuführen ändert nichts.
hat sich für Linux auch etwas geändert? Ich habe mittlerweile eine 7590 und habe dieses Script:
IP="192.168.178.1"
FRITZUSER="admin"
FRITZPW="geheim"
location="/upnp/control/wanpppconn1"
uri="urn:dslforum-org:service:WANPPPConnection:1"
action='AddPortMapping'
SoapParamString="<NewRemoteHost>0.0.0.0</NewRemoteHost>
<NewExternalPort>54321</NewExternalPort>
<NewProtocol>TCP</NewProtocol>
<NewInternalPort>54321</NewInternalPort>
<NewInternalClient>192.168.178.100</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>HTTP-Server</NewPortMappingDescription>
<NewLeaseDuration>0</NewLeaseDuration>"
curl -k -m 5 --anyauth -u "$FRITZUSER:$FRITZPW" https://$IP:49443$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'>$SoapParamString</u:$action></s:Body></s:Envelope>" -s
Aber sowohl bei diesem als auch bei dem oberen bei dem das Script auf eine seperate xml Datei zugreift kommt immer diese Fehlermeldung:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
Hast du da eine Idee? Auch den Befehl 10-15 mal auszuführen ändert nichts.
Du hast vermutlich als Kind auch das eckige ins runde mit Gewalt stecken wollen?
Es erschließt sich mir der Sinn nicht wie das was helfen soll, mit "Gewalt" über ein Dutzend mal zu probieren, wenn die Fehlermeldung sich nicht ändert.
Wenn man nach upnp error 402 fritzbox googelt, bekommt man z.B. das und andere, die einem der Lösung näherbringen könnten.
lks
Hallo Uwe,
ich habe nochmal alles kontrolliert und mit Powershell getestet. Damit hat es zuerst auch nicht funktioniert. Allerdings ist die Box jetzt auch über den WAN Anschluss angeschlossen und nicht wie vorher über Port1. Mit WANIP hat es dann mit deinem Script funktioniert.
Unter Linux zuerst leider immer noch nicht bis ich es ein paar mal öfter ausgeführt habe und siehe da, manchmal muss das eckige in das runde halt mit Gewalt gesteckt werden.
Was mir beim testen aufgefallen ist: Wenn man die Portfreigabe über das Script hinzufügt und über die Weboberfläche entfernt muss man das Script beim nächsten Test immer ein weiteres mal als zuvor ausführen. Sehr kurioses Verhalten wie ich finde.^^ Nach einem Box neustart und dem hinzufügen sowie löschen über das script funktioniert aber alles beim ersten mal.
Also vielen Dank für die Hilfe
ich habe nochmal alles kontrolliert und mit Powershell getestet. Damit hat es zuerst auch nicht funktioniert. Allerdings ist die Box jetzt auch über den WAN Anschluss angeschlossen und nicht wie vorher über Port1. Mit WANIP hat es dann mit deinem Script funktioniert.
Unter Linux zuerst leider immer noch nicht bis ich es ein paar mal öfter ausgeführt habe und siehe da, manchmal muss das eckige in das runde halt mit Gewalt gesteckt werden.
Was mir beim testen aufgefallen ist: Wenn man die Portfreigabe über das Script hinzufügt und über die Weboberfläche entfernt muss man das Script beim nächsten Test immer ein weiteres mal als zuvor ausführen. Sehr kurioses Verhalten wie ich finde.^^ Nach einem Box neustart und dem hinzufügen sowie löschen über das script funktioniert aber alles beim ersten mal.
Also vielen Dank für die Hilfe
Hallo,
ich möchte die Dial-FBNumber nutzen. Gibt es eine Möglichkeit per Befehl ein Telefon auszuwählen, von welchem die gewünschte Rufnummer gewählt wird?
Ich programmiere gerade eine Datenbank aus der ich heraus Rufnummern wählen möchte. Da aber jeder User sein eigenes Telefon hat, würde ich gerne per Befehl festlegen von welchem Telefon angerufen wird. Oder ist es möglich das rufende Telefon innerhalb des Scriptes festzulegen? Man könnte dann für jeden User ein eigenes Script ablegen.
Vielen Dank schon einmal im voraus.
Gruß
Dieterlem
ich möchte die Dial-FBNumber nutzen. Gibt es eine Möglichkeit per Befehl ein Telefon auszuwählen, von welchem die gewünschte Rufnummer gewählt wird?
Ich programmiere gerade eine Datenbank aus der ich heraus Rufnummern wählen möchte. Da aber jeder User sein eigenes Telefon hat, würde ich gerne per Befehl festlegen von welchem Telefon angerufen wird. Oder ist es möglich das rufende Telefon innerhalb des Scriptes festzulegen? Man könnte dann für jeden User ein eigenes Script ablegen.
Vielen Dank schon einmal im voraus.
Gruß
Dieterlem
Hallo colinardo,
ich nutze deinen Skript um das Adressbuch auszulesen und auch neue Einträge zu erstellen.
Zunächst einmal Respekt für deine tolle Arbeit, das hat mir sehr weitergeholfen!
Nun habe ich allerdings ein kleines Problem:
Wenn ich neue Kontakte mit deutschen Umlauten anlegen will, werden die Umlaute im Fritz-Adressbuch nicht richtig dargestellt (z.B. Ã? bei ß usw.), also das encoden funktioniert dort nicht richtig.
Mein Skript sieht folgendermaßen aus (ich stringe mehr oder weniger nur das xml-Konstrukt zusammen, kann man ja schon in der ersten Zeile ganz gut erkennen) - hier habe ich die eigentliche Variable mal durch einen Klartext ersetzt:
Im letzten Teil rufe ich dann eben mit den zuvor definierten Parametern deine Funktion New-Request auf. Bis dahin werden die Umlaute im String noch korrekt dargestellt. Die Funktion wird auch ohne Fehler aufgerufen, aber wie oben beschrieben werden die Umlaute dann falsch kodiert im Fritz-Adressbuch dargestellt.
Hast du eine Ahnung wie man das korrekt stellen könnte (ich dachte an das charset im XML, aber ehrlich gesagt keine Ahnung wie dort was zusammenläuft)?
ich nutze deinen Skript um das Adressbuch auszulesen und auch neue Einträge zu erstellen.
Zunächst einmal Respekt für deine tolle Arbeit, das hat mir sehr weitergeholfen!
Nun habe ich allerdings ein kleines Problem:
Wenn ich neue Kontakte mit deutschen Umlauten anlegen will, werden die Umlaute im Fritz-Adressbuch nicht richtig dargestellt (z.B. Ã? bei ß usw.), also das encoden funktioniert dort nicht richtig.
Mein Skript sieht folgendermaßen aus (ich stringe mehr oder weniger nur das xml-Konstrukt zusammen, kann man ja schon in der ersten Zeile ganz gut erkennen) - hier habe ich die eigentliche Variable mal durch einen Klartext ersetzt:
$ContactData = '<contact><category>0</category><person><realName>'+ "Groß" +'</realName></person><telephony nid="' + $AnzahlNR + '">'
for($i=1;$i -le $AnzahlNR;$i++)
{
if($newContact.('Typ'+$i) -eq "Privat") {$newContact.('Typ'+$i) = "home"}
if($newContact.('Typ'+$i) -eq "Mobil") {$newContact.('Typ'+$i) = "mobile"}
if($newContact.('Typ'+$i) -eq "Geschäftlich") {$newContact.('Typ'+$i) = "work"}
if($newContact.('Typ'+$i) -eq "Fax") {$newContact.('Typ'+$i) = "fax_work"}
$ContactData = $ContactData + '<number type="' + $newContact.('Typ'+$i) + '" prio="0" id="' + ($i-1) + '">' + $newContact.('Nummer'+$i) + '</number>'
}
$ContactData = $ContactData + '</telephony></contact>'
$parameter = [ordered] @{
NewPhonebookID = 0
#NewPhonebookEntryID = 0
NewPhonebookEntryData = $ContactData}
New-Request -urn 'urn:dslforum-org:service:X_AVM-DE_OnTel:1' -action 'SetPhonebookEntryUID' -parameter $parameter
Im letzten Teil rufe ich dann eben mit den zuvor definierten Parametern deine Funktion New-Request auf. Bis dahin werden die Umlaute im String noch korrekt dargestellt. Die Funktion wird auch ohne Fehler aufgerufen, aber wie oben beschrieben werden die Umlaute dann falsch kodiert im Fritz-Adressbuch dargestellt.
Hast du eine Ahnung wie man das korrekt stellen könnte (ich dachte an das charset im XML, aber ehrlich gesagt keine Ahnung wie dort was zusammenläuft)?
Hi Uwe,
genial, vielen Dank! Es hat funktioniert.
Komischerweise hatte ich auch mal versucht, utf-8 und einen XML-Header dem Request hinzuzufügen, damals hat es aber aus welchen Gründen auch immer dann nicht funktioniert (wahrscheinlich falscher Syntax meinerseits).
Wie auch immer, jetzt funktioniert alles wie es soll, vielen Dank!
Grüße
genial, vielen Dank! Es hat funktioniert.
Komischerweise hatte ich auch mal versucht, utf-8 und einen XML-Header dem Request hinzuzufügen, damals hat es aber aus welchen Gründen auch immer dann nicht funktioniert (wahrscheinlich falscher Syntax meinerseits).
Wie auch immer, jetzt funktioniert alles wie es soll, vielen Dank!
Grüße
Hallo @colinardo, du bist ja mal krass schnell unterwegs
Hab es eben getestet und es funktioniert super! Vielen DANK! Ich bin begeistert 
Hallo Zusammen,
bin auf diesen exzellenten Post gestoßen, da ich in England versuche meine Fritz Box 7590 an das UK SKY Broadband anzuschließen.
Ich muss meine 7590 Box in England auf Sky BSkyB VDSL2 Broadband einstellen. Sky verwendet das Protokoll MER/DHCP 61.
Dank TR-064 bin ich schon auf der Box und konnte u.A. LinkType .
Allerdings fehlen mir die relevanten Einträge unter: urn:dslforum-org:service:WANDSLInterfaceConfig:1.
In der 7590 Box unter ../wandsllinkconfigSCPD.xml laesst es nicht den Wert "IPoA" oder "CIP" zu, as per Kopie unten.
<name>LinkType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>EoA</allowedValue>
<allowedValue>PPPoA</allowedValue>
<allowedValue>PPPoE</allowedValue>
<allowedValue>Unconfigured</allowedValue>
</allowedValueList>
Kurze Frage, wie bekomme ich die "wandsllinkconfigSCPD.xml" geaendert (re-importiert), so dass ich wie folgt die Werte definiere:
Modulation Type existiert gar nicht in der AVM "wandsllinkconfigSCPD.xml" Datei
As per Standard "UPnP-gw-WANDSLLinkConfig-v1-Service.pdf"
Mein Abänderung-Wunsch:
<stateVariable sendEvents="no">
<name>LinkType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>EoA</allowedValue>
<allowedValue>IPoA</allowedValue>
<allowedValue>PPPoA</allowedValue>
<allowedValue>PPPoE</allowedValue>
<allowedValue>CIP</allowedValue>
<allowedValue>Unconfigured</allowedValue>
</allowedValueList>
</stateVariable>
<stateVariable sendEvents="no">
<name>ModulationType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>ADSL_G.dmt</allowedValue>
<allowedValue>ADSL_G.lite</allowedValue>
<allowedValue>G.shdsl</allowedValue>
<allowedValue>IDSL</allowedValue>
<allowedValue>HDSL</allowedValue>
<allowedValue>SDSL</allowedValue>
<allowedValue>VDSL</allowedValue>
</allowedValueList>
</stateVariable>
PS: Ich weiß allerdings nicht, ob ich zusätzlich auch noch per TR-069 den SKY ISP DHCP Option 60/61 konfigurieren muss.
Alles Gute aus England erstmal.
bin auf diesen exzellenten Post gestoßen, da ich in England versuche meine Fritz Box 7590 an das UK SKY Broadband anzuschließen.
Ich muss meine 7590 Box in England auf Sky BSkyB VDSL2 Broadband einstellen. Sky verwendet das Protokoll MER/DHCP 61.
Dank TR-064 bin ich schon auf der Box und konnte u.A. LinkType .
Allerdings fehlen mir die relevanten Einträge unter: urn:dslforum-org:service:WANDSLInterfaceConfig:1.
In der 7590 Box unter ../wandsllinkconfigSCPD.xml laesst es nicht den Wert "IPoA" oder "CIP" zu, as per Kopie unten.
<name>LinkType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>EoA</allowedValue>
<allowedValue>PPPoA</allowedValue>
<allowedValue>PPPoE</allowedValue>
<allowedValue>Unconfigured</allowedValue>
</allowedValueList>
Kurze Frage, wie bekomme ich die "wandsllinkconfigSCPD.xml" geaendert (re-importiert), so dass ich wie folgt die Werte definiere:
Modulation Type existiert gar nicht in der AVM "wandsllinkconfigSCPD.xml" Datei
As per Standard "UPnP-gw-WANDSLLinkConfig-v1-Service.pdf"
Mein Abänderung-Wunsch:
<stateVariable sendEvents="no">
<name>LinkType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>EoA</allowedValue>
<allowedValue>IPoA</allowedValue>
<allowedValue>PPPoA</allowedValue>
<allowedValue>PPPoE</allowedValue>
<allowedValue>CIP</allowedValue>
<allowedValue>Unconfigured</allowedValue>
</allowedValueList>
</stateVariable>
<stateVariable sendEvents="no">
<name>ModulationType</name>
<dataType>string</dataType>
<allowedValueList>
<allowedValue>ADSL_G.dmt</allowedValue>
<allowedValue>ADSL_G.lite</allowedValue>
<allowedValue>G.shdsl</allowedValue>
<allowedValue>IDSL</allowedValue>
<allowedValue>HDSL</allowedValue>
<allowedValue>SDSL</allowedValue>
<allowedValue>VDSL</allowedValue>
</allowedValueList>
</stateVariable>
PS: Ich weiß allerdings nicht, ob ich zusätzlich auch noch per TR-069 den SKY ISP DHCP Option 60/61 konfigurieren muss.
Alles Gute aus England erstmal.
Auch ich bin total begeistert von der Arbeit von colinardo! Seit einem Jahr suche ich nach einem Code als Wahlhilfe in der FB. Eigentlich bin ich mehr in .Net unterwegs (da gibt es leider noch nichts zu dem Problem). Aber die PowerShell wird's auch richten können. Das Script funktioniert auf Anhieb, auch auf unserer 7270, die nur zum Telefonieren über die Telekom (unser "altes" ISDN) genutzt wird. Eine zweite Leitung mit 100er DSL haben wir bei der Thüringer Netcom über eine 7590.
Ich benötige im Script nur die Wahlhilfe. Damit ist es möglich, mit Doppelklick auf eine Telefonnummer in der Patientenakte sofort einen Anruf zu tätigen. Problem ist jetzt nur noch folgendes:
Hinter der 7270 (wird in Kürze durch eine 7590 ersetzt) hängt über S0 eine TK ELMEG ICT 880 mit vielen Telefonen und zwei Faxgeräten. Wenn das Script gewählt hat, tut sich erstmal weit und breit nix. Erst wenn der Angerufene abhebt, klingelt eins unserer Telefone. Gibt es eine Funktion, die es ermöglicht, schon vorher auf die Leitung zu kommen, so dass man das Anwählen (Rufton) schon mitbekommen kann?
Viele Grüße
Norbert
Ich benötige im Script nur die Wahlhilfe. Damit ist es möglich, mit Doppelklick auf eine Telefonnummer in der Patientenakte sofort einen Anruf zu tätigen. Problem ist jetzt nur noch folgendes:
Hinter der 7270 (wird in Kürze durch eine 7590 ersetzt) hängt über S0 eine TK ELMEG ICT 880 mit vielen Telefonen und zwei Faxgeräten. Wenn das Script gewählt hat, tut sich erstmal weit und breit nix. Erst wenn der Angerufene abhebt, klingelt eins unserer Telefone. Gibt es eine Funktion, die es ermöglicht, schon vorher auf die Leitung zu kommen, so dass man das Anwählen (Rufton) schon mitbekommen kann?
Viele Grüße
Norbert
wenn das Telefon direkt an der FB hängt oder damit verbunden ist (DECT/TAE/IP).
Schade, dann wird es wohl nichts. Ich könnte ein analoges Telefon am Tresen nur für das Calling einrichten, brauche es im Schaltschrank nur umzustecken auf FON1 der FB. Aber dann ist es als Teilnehmer in der TK verloren (Gespräche von draussen könnte es zwar entgegennehmen, aber Weiterverbinden ist dann unmöglich). Gibts auch kein Event? Ich habe unseren CallMonitor in Vb.net programmiert. Da fange ich RING, CALL, CONNECT und DISCONNECT ab (TCP Client). Mehr aber auch nicht. Anrufen kann ich von diesem Teil nicht. Und wahrscheinlich auch nicht die Leitung überwachen.
Von der TK gehen 8 analoge und 8 ISDN ins gesamte Gebäude. Ist seit 30 Jahren so. Muss mal drüber schlafen, ob ich da mit einer Weiche was abbeissen kann. Kann man wenigstens mit einer Funktion abfragen, ob der gerufene Teilnehmer besetzt ist? Das würde schon eine erhebliche Erleichterung bedeuten, denn man müsste auf Verdacht nicht ellenlang warten, ob das Telefon klingelt oder nicht.
@colinardo: Es ist höchst bewundernswert und ich habe die größte Hochachtung davor, dass Du nach all den Jahren noch immer da bist für Hilfe und Unterstützung! Ich danke Dir ganz herzlich.
Viele Grüße
Norbert
Schade, dann wird es wohl nichts. Ich könnte ein analoges Telefon am Tresen nur für das Calling einrichten, brauche es im Schaltschrank nur umzustecken auf FON1 der FB. Aber dann ist es als Teilnehmer in der TK verloren (Gespräche von draussen könnte es zwar entgegennehmen, aber Weiterverbinden ist dann unmöglich). Gibts auch kein Event? Ich habe unseren CallMonitor in Vb.net programmiert. Da fange ich RING, CALL, CONNECT und DISCONNECT ab (TCP Client). Mehr aber auch nicht. Anrufen kann ich von diesem Teil nicht. Und wahrscheinlich auch nicht die Leitung überwachen.
Von der TK gehen 8 analoge und 8 ISDN ins gesamte Gebäude. Ist seit 30 Jahren so. Muss mal drüber schlafen, ob ich da mit einer Weiche was abbeissen kann. Kann man wenigstens mit einer Funktion abfragen, ob der gerufene Teilnehmer besetzt ist? Das würde schon eine erhebliche Erleichterung bedeuten, denn man müsste auf Verdacht nicht ellenlang warten, ob das Telefon klingelt oder nicht.
@colinardo: Es ist höchst bewundernswert und ich habe die größte Hochachtung davor, dass Du nach all den Jahren noch immer da bist für Hilfe und Unterstützung! Ich danke Dir ganz herzlich.
Viele Grüße
Norbert
Um TAPI hab ich bis jetzt immer einen großen Bogen gemacht. Stand auf der ellenlangen Liste ganz hinten. Meine ELMEG (s.o.) ist eigentlich eine gute und nicht billige Anlage. Und ich glaube, es gibt auch einen TAPI-Treiber dazu. Mehr weiss ich aber darüber nicht. Heute will ich erstmal den Monitor und den Caller fertigbekommen (ini-Dateien und Parameterübergabe). Dank Deinem Code bin ich dabei schon fast am Ziel.
Schöne Grüße
Norbert
Schöne Grüße
Norbert
Hallo zusammen,
erstmal vielen Dank für dein tolles Skript colinardo!
War wirklich froh als ich darauf gestoßen bin, als ich nach einer Möglichkeit gesucht habe eine Portfreigabe in meiner Fritzbox einzurichten, ohne mich an der Oberfläche der Fritzbox anmelden zu müssen.
Leider ist das genau die eine Aktion des Skriptes, die einfach nicht funktionieren möchte.
Ich erhalte leider immer die folgende Fehlermeldung:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
In C:\temp\FritzboxRemote.ps1:51 Zeichen:13
throw ([System.IO.StreamReader]($_.Exception.InnerExcepti ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : OperationStopped: (<?xml version="...>
</s:Envelope>:String) [], RuntimeException
FullyQualifiedErrorId : <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Ich habe eine Fritzbox 7530 mit der OS-Version 07.27.
Die Option “Zugriff für Anwendungen zulassen” ist aktiviert.
Für die Anmeldung über das Skript an der Fritzbox habe ich einen separaten Benutzer mit den Berechtigungen “Fritz!BoxEinstellungen”, “Sprachnachrichten...” und “Smart Home” angelegt.
Der Rechner von welchem ich das Skript ausführe ist auch im selben Netzwerk und ich versuche auch nur für den Rechner eine Freigabe einzurichten, von dem ich auch das Skript ausführe.
Folgende Daten habe ich an das Skript übergeben:
ExternalPort: 8088
Protocol: TCP
InternalClient: 192.168.160.9
InternalPort: 8088
Description: Test
Ich habe auch schon versucht den AVM-Support zu kontaktieren, aber deren Antworten waren leider nur bedingt bis gar nicht zu gebrauchen.
1. Antwort:
..."Leider klappt hier die Erstellung von Portfreigaben per Powershell-Skript nicht und wird mit entsprechenden Fehlermeldungen quittiert.
Diese Vorgehensweise wird von der FRITZ!Box nicht unterstützt.
Weshalb das so ist, entzieht sich allerdings meiner Kenntnis.
https://avm.de/service/fritzbox/fritzbox-7530/wissensdatenbank/publicati ...;
...
Damit wollte ich mich nicht zufrieden geben und habe nochmal nachgehakt und dann kam die 2. Antwort:
..."Informationen zu FRITZ!Box-Schnittstellen und -Protokollen, die Sie für die Realisierung eigener Entwicklungs-Projekte benötigen, finden Sie auf unserer Internetseite für Entwicklungssupport (https://avm.de/service/schnittstellen/).
Ihre Hinweise zu der dort bereitgestellten Dokumentation nehmen wir gerne per E-Mail unter entwicklungssupport@avm.de entgegen.
Ich hoffe, Ihnen damit weitergeholfen zu haben"...
Und aufgrund dieser Antworten bin ich leider noch nicht wirklich einen Schritt weitergekommen.
Vielleicht hat hier jemand eine Idee, woran es liegen könnte oder weiß sogar was genau das Problem ist. Bin für jeden Rat dankbar!
Viele Grüße
Dennis
erstmal vielen Dank für dein tolles Skript colinardo!
War wirklich froh als ich darauf gestoßen bin, als ich nach einer Möglichkeit gesucht habe eine Portfreigabe in meiner Fritzbox einzurichten, ohne mich an der Oberfläche der Fritzbox anmelden zu müssen.
Leider ist das genau die eine Aktion des Skriptes, die einfach nicht funktionieren möchte.
Ich erhalte leider immer die folgende Fehlermeldung:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
In C:\temp\FritzboxRemote.ps1:51 Zeichen:13
throw ([System.IO.StreamReader]($_.Exception.InnerExcepti ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : OperationStopped: (<?xml version="...>
</s:Envelope>:String) [], RuntimeException
FullyQualifiedErrorId : <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/;>"
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Ich habe eine Fritzbox 7530 mit der OS-Version 07.27.
Die Option “Zugriff für Anwendungen zulassen” ist aktiviert.
Für die Anmeldung über das Skript an der Fritzbox habe ich einen separaten Benutzer mit den Berechtigungen “Fritz!BoxEinstellungen”, “Sprachnachrichten...” und “Smart Home” angelegt.
Der Rechner von welchem ich das Skript ausführe ist auch im selben Netzwerk und ich versuche auch nur für den Rechner eine Freigabe einzurichten, von dem ich auch das Skript ausführe.
Folgende Daten habe ich an das Skript übergeben:
ExternalPort: 8088
Protocol: TCP
InternalClient: 192.168.160.9
InternalPort: 8088
Description: Test
Ich habe auch schon versucht den AVM-Support zu kontaktieren, aber deren Antworten waren leider nur bedingt bis gar nicht zu gebrauchen.
1. Antwort:
..."Leider klappt hier die Erstellung von Portfreigaben per Powershell-Skript nicht und wird mit entsprechenden Fehlermeldungen quittiert.
Diese Vorgehensweise wird von der FRITZ!Box nicht unterstützt.
Weshalb das so ist, entzieht sich allerdings meiner Kenntnis.
https://avm.de/service/fritzbox/fritzbox-7530/wissensdatenbank/publicati ...;
...
Damit wollte ich mich nicht zufrieden geben und habe nochmal nachgehakt und dann kam die 2. Antwort:
..."Informationen zu FRITZ!Box-Schnittstellen und -Protokollen, die Sie für die Realisierung eigener Entwicklungs-Projekte benötigen, finden Sie auf unserer Internetseite für Entwicklungssupport (https://avm.de/service/schnittstellen/).
Ihre Hinweise zu der dort bereitgestellten Dokumentation nehmen wir gerne per E-Mail unter entwicklungssupport@avm.de entgegen.
Ich hoffe, Ihnen damit weitergeholfen zu haben"...
Und aufgrund dieser Antworten bin ich leider noch nicht wirklich einen Schritt weitergekommen.
Vielleicht hat hier jemand eine Idee, woran es liegen könnte oder weiß sogar was genau das Problem ist. Bin für jeden Rat dankbar!
Viele Grüße
Dennis
Hi Uwe,
danke dir für deine schnelle Rückmeldung!
Tja, so einfach kann es manchmal sein
! Das Abschalten der 2-Faktor-Bestätigung war scheinbar der ausschlaggebende Tipp!
Danach konnte ich die Freigabe per Skript erstellen. Zwar hatte ich auch zwischendurch das Problem, dass ich einen Befehl mehrmals absenden musste, damit die Freigabe angelegt wird, aber immerhin hat es überhaupt mal funktioniert.
Gefühlt hat es besser funktioniert, wenn ich eine Freigabe erstellt hatte und dann immer wieder den gleichen Request abgesetzt habe, eben dann nur mit dem Flag Enabled auf true oder false. Wollte das Skript nämlich eigentlich für eine Automatisierung nutzen und wenn man sich nicht darauf verlassen kann, dass die Fritzbox die Freigabe annimmt, ist das leider schon etwas ungünstig.
Vielen Dank für deine Hilfe!
Viele Grüße
Dennis
danke dir für deine schnelle Rückmeldung!
Tja, so einfach kann es manchmal sein
Danach konnte ich die Freigabe per Skript erstellen. Zwar hatte ich auch zwischendurch das Problem, dass ich einen Befehl mehrmals absenden musste, damit die Freigabe angelegt wird, aber immerhin hat es überhaupt mal funktioniert.
Gefühlt hat es besser funktioniert, wenn ich eine Freigabe erstellt hatte und dann immer wieder den gleichen Request abgesetzt habe, eben dann nur mit dem Flag Enabled auf true oder false. Wollte das Skript nämlich eigentlich für eine Automatisierung nutzen und wenn man sich nicht darauf verlassen kann, dass die Fritzbox die Freigabe annimmt, ist das leider schon etwas ungünstig.
Vielen Dank für deine Hilfe!
Viele Grüße
Dennis
Hey colinardo,
auch ich schließe mich den Kollegen von oben an und bekunde meinen aufrichtigsten Respekt für deine Arbeit.
Skript kopiert und funktioniert auf Anhieb.
Ich habe allerdings keine Frage, sondern eher eine neue Funktion für dich zum Einbauen:
Sicherlich kannst du dieses auch für deine Funktionssammlung nutzen, verbessern und einbauen, wenn du es möchtest. Evtl. folgt noch bei Zeiten eine Funktion Update-FBPhoneBookEntry.
Ein Frage habe ich aber trotzdem noch:
Erwägst du evtl. irgendwann dieses Skript als Modul auf GitHub hochzuladen und via PowerShell-Gallery verfügbar zu machen?
Vielen Dank und schöne Grüße
auch ich schließe mich den Kollegen von oben an und bekunde meinen aufrichtigsten Respekt für deine Arbeit.
Skript kopiert und funktioniert auf Anhieb.
Ich habe allerdings keine Frage, sondern eher eine neue Funktion für dich zum Einbauen:
# Telefonbucheinträge abrufen
function Get-FBPhoneBookList(){
param(
[int]$maxentries = 999,
[int]$days = 999,
[Parameter(mandatory=$false)][ValidateNotNullOrEmpty()]$phonebookname = "Telefonbuch"
)
# Telefonbücher auslesen Id, Name
$phonebooks = (New-Request -urn 'urn:dslforum-org:service:X_AVM-DE_OnTel:1' -action 'GetPhonebookList').Envelope.Body.GetPhonebookListResponse.NewPhonebookList.split(",") | select @{n='Id';e={$_}},@{n='Name';e={(New-Request -urn 'urn:dslforum-org:service:X_AVM-DE_OnTel:1' -action 'GetPhonebook' -parameter @{NewPhonebookID = $_}).Envelope.Body.GetPhonebookResponse.NewPhonebookName}}
# id des gewünschten Telefonbuchs ermitteln
$pbid = $phonebooks | ?{$_.Name -eq $phonebookname} | select -Expand Id
# wenn Telefonbuch mit dem Namen nicht gefunden wurde werfe Fehler und verlasse Funktion
if($pbid.Count -eq 0){
Write-Error -Message "Das Telefonbuch mit dem Namen '$phonebookname' existiert nicht!" -Category InvalidArgument
return
}
$resp = New-Request -urn 'urn:dslforum-org:service:X_AVM-DE_OnTel:1' -action 'GetPhoneBook' -parameter ([ordered]@{NewPhoneBookID = $pbid})
$wc = new-object System.Net.WebClient
$wc.Encoding = [System.Text.Encoding]::UTF8
$list = ([xml]$wc.DownloadString("$($resp.Envelope.Body.GetPhonebookResponse.NewPhonebookURL)&max=$maxentries&days=$days")).phonebooks.phonebook.contact
$Phonebooklist = @()
foreach($entry in $list){
$name = $entry.person.realName
$uid = $entry.uniqueid
$cat = $entry.category # 1 (wichtige Person (Anrufe von diesen Rufnummern klingeln auch bei aktiver Klingelsperre))
foreach($number in $entry.telephony.number){
$type = $number.type
$qDial = $number.quickdial
$vanity = $number.vanity
$prio = $number.prio
$text = $number."#text"
$a = New-Object -TypeName PSObject
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Name' -Value $name
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'ID' -Value $uid
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Caterory' -Value $cat
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Type' -Value $type
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Quickdial' -Value $qDial
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Vanity' -Value $vanity
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Priority' -Value $prio
Add-Member -InputObject $a -MemberType 'NoteProperty' -Name 'Text' -Value $text
$Phonebooklist += $a
}
}
return $Phonebooklist
}
Sicherlich kannst du dieses auch für deine Funktionssammlung nutzen, verbessern und einbauen, wenn du es möchtest. Evtl. folgt noch bei Zeiten eine Funktion Update-FBPhoneBookEntry.
Ein Frage habe ich aber trotzdem noch:
Erwägst du evtl. irgendwann dieses Skript als Modul auf GitHub hochzuladen und via PowerShell-Gallery verfügbar zu machen?
Vielen Dank und schöne Grüße
Ich komme gerade mit einem Problem nicht weiter. Ab und an öffne ich mit dem Script einen Port auf der FritzBox (Add-FBPortmapping -ExternalPort 80 -InternalClient '192.168.100.100' -InternalPort 8080 -Protocol TCP -Description 'Server'), was einwandfrei funktioniert. Der Versuch den Port wieder zu schließen (Delete-FBPortMapping -ExternalPort 80 -InternalClient '192.168.100.100' -InternalPort 8080 -Protocol TCP -Description 'Server'), endet jedoch mit folgender Fehlermeldung .
Der geöffnete Port sieht aus, wie auf dem Screenshot.
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>714</errorCode>
<errorDescription>NoSuchEntryInArray</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
In C:\System\LE\ClosePort.ps1:54 Zeichen:13
+ throw ([System.IO.StreamReader]($_.Exception.InnerExcepti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (<?xml version="...>
</s:Envelope>:String) [], RuntimeException
+ FullyQualifiedErrorId : <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>714</errorCode>
<errorDescription>NoSuchEntryInArray</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Der geöffnete Port sieht aus, wie auf dem Screenshot.
Für meinen Zweck habe ich jetzt den Workaround gefunden, die bestehende Freigabe mit Add-FBPortmapping zu Enablen bzw. zu Disablen. Das funktioniert zum Glück noch. Mit der TR-064 Schnittstelle gab es meines Wissens ja schon öfters Probleme nach neue Fritz!OS Versionen. Schade, dass hier offenbar das Testing bei AVM nicht so recht greift...
Zitat von @colinardo:
habe dir gerade eine neue Funktion dafür zum Skript oben hinzugefügt. Sie lautet Update-FBPhonebook. Diese rufst du mit dem Namen des Telefonbuches als Parameter bspw. so auf
Die Funktion triggert die Aktualisierung per AVM Default für alle hinzugefügten Online-Telefonbücher. Der Parameter mit den Namen des Telefonbuches bestimmt hier vornehmlich auf welchen Sync-Abschluss die Funktion hier warten soll. Die Funktion fragt dazu periodisch den Status der Synchronisierung des jeweiligen Telefonbuches ab und bei Erfolg liefert es alle Status-Variablen des Telefonbuchs inkl. Datum der letzten Aktualisierung zurück. Ohne den Parameter -wait wartet die Funktion nicht auf den Abschluss der Synchronisierung.
Hier eine Beispielausgabe der Funktion:
Viel Spaß damit
Grüße Uwe
Zitat von @Marco8383:
Gibt es irgendeine Möglichkeit ein "Online Telefonbuch" automatisch zu aktualisieren. Also zum Beispiel einmal in der Stunde? Im Moment wird das ja nur über Nacht einmal aktualisiert...
Hallo @Marco8383,Gibt es irgendeine Möglichkeit ein "Online Telefonbuch" automatisch zu aktualisieren. Also zum Beispiel einmal in der Stunde? Im Moment wird das ja nur über Nacht einmal aktualisiert...
habe dir gerade eine neue Funktion dafür zum Skript oben hinzugefügt. Sie lautet Update-FBPhonebook. Diese rufst du mit dem Namen des Telefonbuches als Parameter bspw. so auf
> Update-FBPhonebook -name "MeinOnlineTelefonbuch" -wait
>
Hier eine Beispielausgabe der Funktion:
Viel Spaß damit
Grüße Uwe
Hallo @colinardo,
ich habe mit dem Script bzw. der Funktion "Update-FBPhonebook" seit dem Update auf die Version 7.28 (FritzBox 6660 Cable) Probleme. Das Script läuft zwar ganz normal durch (ohne Fehlermeldung). Das hier ist das Ergebnis:
Update in progress please wait ...
Update in progress please wait ...
u : urn:dslforum-org:service:X_AVM-DE_OnTel:1
NewEnable : 1
NewStatus : 0
NewLastConnect : 2021-10-07T11:48:14+02:00
NewUrl : https://www.google.com/accounts/ClientLogin
NewServiceId : cp
NewUsername :
NewName : Google
Das Problem ist, wenn ich ein Gespräche führe und das Script am Ende ist, bricht die Telefonverbindung ab. Hab das jetzt ein paar mal getestet.
Hast du eine Idee an was das liegt?
Servus @Marco8383 .
Das Skript benutzt nur die regulär verfügbaren TR-064 Funktionen der Box nicht mehr und nicht weniger.
Ich würde aber trotzdem empfehlen das Update nicht durchzuführen wenn User aktiv sind, denn das Skript deaktiviert und aktiviert das Telefonbuch temporär ganz schnell hintereinander, um das Update des Telefonbuchs mit der Remote-Quelle auf der Box zu triggern und das könnte durchaus dazu führen das die Box hier allergisch drauf reagiert wenn gerade ein Gespräch läuft. Eine native Funktion zum Updaten der CardDAV Telefonbücher gibt es nämlich noch nicht im TR-064 Protokoll der Box. Diese Funktion wurde also aktuell als Workaround implementiert der es überhaupt ermöglicht dies automatisiert zu tun.
Grüße Uwe
Das Problem ist, wenn ich ein Gespräche führe und das Script am Ende ist, bricht die Telefonverbindung ab. Hab das jetzt ein paar mal getestet.
Hast du eine Idee an was das liegt?
Deshalb hat AVM den per Default vorhandenen Update-Task wohl auch immer in die sehr späte Nacht gelegt. Das liegt wohl aber eher an der Implementierung von AVM beim Update des Telefonbuchs an sich. Benutzt du ein Fritz!Fon? Wenn ja wird das wohl deswegen während des Gesprächs versuchen ein Update des telefoneignen Telefonbuchs durchzuführen was dann zu einer Überlastung und Abbruch des laufenden Gesprächs führt.Hast du eine Idee an was das liegt?
Das Skript benutzt nur die regulär verfügbaren TR-064 Funktionen der Box nicht mehr und nicht weniger.
Ich würde aber trotzdem empfehlen das Update nicht durchzuführen wenn User aktiv sind, denn das Skript deaktiviert und aktiviert das Telefonbuch temporär ganz schnell hintereinander, um das Update des Telefonbuchs mit der Remote-Quelle auf der Box zu triggern und das könnte durchaus dazu führen das die Box hier allergisch drauf reagiert wenn gerade ein Gespräch läuft. Eine native Funktion zum Updaten der CardDAV Telefonbücher gibt es nämlich noch nicht im TR-064 Protokoll der Box. Diese Funktion wurde also aktuell als Workaround implementiert der es überhaupt ermöglicht dies automatisiert zu tun.
Grüße Uwe
Hallo @colinardo,
danke für die schnelle Antwort. Das hört sich so an als könnte man da nicht viel machen. Hab den Support mal darauf hingewiesen, aber eine Hoffnung dass hier was gemacht wird habe ich nicht. Da kam dann nur als Antwort "Warum machen Sie das mit einem Skript, die FritzBox aktualisiert doch jede Nacht automatisch".

Ist es möglich mit dem Skript eine PPPoE Konfiguration zu manipulieren/erstellen? Rufnummern hinzuzufügen und SIP-Kennungen einzugeben?
Die Portforwarding Commands funktionieren alle nicht auf meiner FB 6591 Cable mit FW 07.28.
Get-FBPortMappings
Get-FBPortMappings
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
In C:\Program Files\WindowsPowerShell\Modules\fritzbox_module\fritzbox_module.psm1:53 Zeichen:13
+ throw ([System.IO.StreamReader]($_.Exception.InnerExcepti ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (<?xml version="...>
</s:Envelope>:String) [], RuntimeException
+ FullyQualifiedErrorId : <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Im Abschnitt "Dokumentation zur TR-064 Schnittstelle" (hier) lese ich:
"die Dienstbeschreibungen mit den nötigen Parametern findet sich hier:
http://avm.de/service/schnittstellen/;
Ich klappe dort "Apps / TR-064" und erhalte ein paar Abschnitte mit Links auf pdf Dokumente.
Nirgends gibt es einen Unterpunkt für Portforwarding. Es gibt "Heimnnetz"; das pdf dazu liestet irgendetwas auf, was ic nicht verstehe. Ich weiß ja auch nicht, wonach ich suche.
" welche Aktionen es darin gibt lässt sich der oben verlinkten Dokumentation bei AVM entnehmen." AKtionen soll ich also finden. Ich finde aber keine.
Ich habe mal aus der tr64desc.xml "/layer3forwardingSCPD.xml" herausgepickt. Das war das einzige mit dem Substring "forward".
In dieser Datei gibt es einige Einträge mit "Get..." und "New..." beginnend, aber woher soll ich wissen, welche <action> darin das Powershell Command 'Get-FBPortMappings' benötigt???
"GetForwardNumberOfEntries"? Dem Namen nach liefert das nur eine Anzahl...
Ich verstehe den Zusammenhang dieses Gefummels überhaupt nicht.
Ich soll nun in das Script (welches "Script"? Ich habe nur zwei Moduldateien. Welche?") hineinschauen und eine $action Variable im New-Request "anschauen" - oder editieren?
Soll ich das Modul editieren?
Wo werden die Argumente -URN und -action übergeben? Und wem?
Ich möchte einfach nur "Get-FBPortMappings" ausführen.
Welcher Servicetyp und blabla ist doch eindeutig, oder nicht?
Ich verstehe nihct, warum ich an dieser Funktion noch etwas editieren soll und vor allem wie.
Müssen die Moduldateien geändert werden?
"die Dienstbeschreibungen mit den nötigen Parametern findet sich hier:
http://avm.de/service/schnittstellen/;
Ich klappe dort "Apps / TR-064" und erhalte ein paar Abschnitte mit Links auf pdf Dokumente.
Nirgends gibt es einen Unterpunkt für Portforwarding. Es gibt "Heimnnetz"; das pdf dazu liestet irgendetwas auf, was ic nicht verstehe. Ich weiß ja auch nicht, wonach ich suche.
" welche Aktionen es darin gibt lässt sich der oben verlinkten Dokumentation bei AVM entnehmen." AKtionen soll ich also finden. Ich finde aber keine.
Ich habe mal aus der tr64desc.xml "/layer3forwardingSCPD.xml" herausgepickt. Das war das einzige mit dem Substring "forward".
In dieser Datei gibt es einige Einträge mit "Get..." und "New..." beginnend, aber woher soll ich wissen, welche <action> darin das Powershell Command 'Get-FBPortMappings' benötigt???
"GetForwardNumberOfEntries"? Dem Namen nach liefert das nur eine Anzahl...
Ich verstehe den Zusammenhang dieses Gefummels überhaupt nicht.
Ich soll nun in das Script (welches "Script"? Ich habe nur zwei Moduldateien. Welche?") hineinschauen und eine $action Variable im New-Request "anschauen" - oder editieren?
Soll ich das Modul editieren?
Wo werden die Argumente -URN und -action übergeben? Und wem?
Ich möchte einfach nur "Get-FBPortMappings" ausführen.
Welcher Servicetyp und blabla ist doch eindeutig, oder nicht?
Ich verstehe nihct, warum ich an dieser Funktion noch etwas editieren soll und vor allem wie.
Müssen die Moduldateien geändert werden?
Funktioniert bei mir leider nicht... NewAddressSource wird nicht angezeigt...? module-version 1.0.4, heute morgen installiert...
HW:
NewModelName : FRITZ!Box 7590
NewDescription : FRITZ!Box 7590 154.07.28
HW:
NewModelName : FRITZ!Box 7590
NewDescription : FRITZ!Box 7590 154.07.28
Zitat von @colinardo:
Servus,
die Funktion ist schon im Skript vorhanden. Mit dem CMDLet Get-FBHostlist und dem Parameter -IncludeDHCPLeaseInfo lassen sich alle Hosts an der Fritzbox inkl ihren DHCP-Eigenschaften auslesen.
Hier ein Beispiel der Ausgabe:
Grüße Uwe
Zitat von @amdinistrator:
hi! Gibt es einen Weg, DHCP Reservierungen auszulesen? Etwas mühsam, bei jedem Host reinzuklicken und den Haken zu suchen... Finde leider keine Funktion dazu, bin aber auch etwas unerfahren...
hi! Gibt es einen Weg, DHCP Reservierungen auszulesen? Etwas mühsam, bei jedem Host reinzuklicken und den Haken zu suchen... Finde leider keine Funktion dazu, bin aber auch etwas unerfahren...
Servus,
die Funktion ist schon im Skript vorhanden. Mit dem CMDLet Get-FBHostlist und dem Parameter -IncludeDHCPLeaseInfo lassen sich alle Hosts an der Fritzbox inkl ihren DHCP-Eigenschaften auslesen.
Get-FBHostList -IncludeDHCPLeaseInfo | format-table HostName,IPAddress,MACAddress,NewAddressSource,NewLeaseTimeRemaining -AutoSize -Wrap
Hier ein Beispiel der Ausgabe:
Grüße Uwe
Zitat von @colinardo:
Funktioniert bei mir leider nicht... NewAddressSource wird nicht angezeigt...? module-version 1.0.4, heute morgen installiert...
Die Funktion habe ich vorhin erst in v1.0.5 um den Parameter ergänzt, lade es dir nochmal über den bereits erhaltenen Link herunter.ok, funktioniert jetzt, tut aber nicht ganz, was ich suche: Es zeigt zwar an, welcher Host per DHCP eine Adresse bekommen hat, aber nicht, ob das eine an den Host gebundene DHCP-Reservierung ist ("Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen"). Any Chance?
Aber schon mal Danke für das rasche Update.
Zitat von @colinardo:
Zitat von @amdinistrator:
ok, funktioniert jetzt, tut aber nicht ganz, was ich suche: Es zeigt zwar an, welcher Host per DHCP eine Adresse bekommen hat, aber nicht, ob das eine an den Host gebundene DHCP-Reservierung ist ("Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen"). Any Chance?
Das ist die Info die die Fritzbox herausgibt, die LeaseTime sollte bei solchen Clients immer auf dem maximal konfigurierten Wert stehen (daran solltest du sie erkennen können), kann ich aber gerade nicht testen.ok, funktioniert jetzt, tut aber nicht ganz, was ich suche: Es zeigt zwar an, welcher Host per DHCP eine Adresse bekommen hat, aber nicht, ob das eine an den Host gebundene DHCP-Reservierung ist ("Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen"). Any Chance?
Leider nicht. Ich sehe keinen Unterschied zwischen einem Eintrag mit Reservierung und einem ohne. Es scheint, ich muss verschiedene Bereiche wählen, also 20-30 für Reservierungen und 31-x für sonstige. Schade. Irgendwo muss die Info doch sein, die Box zeigt die Info im UI ja auch an...
@colinardo
Hi Uwe,
beim ersten Überfliegen, fehlt da nicht ein $ in Zeile 13 (ja, ich bin ein Pingelkopp)?
$xml = irm -Uri "$url/login_sid.lua" -SessionVariable $ws -ContentType "application/xml"
Ich bin dabei, mir nach einer Linux-Skriptvorlage etwas zu schreiben, um ein Zertifikat hochzuladen. Aber ich sehe, du bist da schon viel weiter (tolle Arbeit übrigens!). Bei mir funktioniert das ohne SessionVariable, fehlte in der Vorlage. Würde dir demnächst gern ein paar Fragen stellen, wenn ich darf.
Gruß Sam
edit: Wow, wollte mir gerade das zip-File herunterladen, man hat sich das Leben verändert. Ich 'abe gar kein PayPal (Ja, so etwas gibt es noch, ähm, so jemanden). Schade.
Hi Uwe,
beim ersten Überfliegen, fehlt da nicht ein $ in Zeile 13 (ja, ich bin ein Pingelkopp)?
$xml = irm -Uri "$url/login_sid.lua" -SessionVariable $ws -ContentType "application/xml"
Ich bin dabei, mir nach einer Linux-Skriptvorlage etwas zu schreiben, um ein Zertifikat hochzuladen. Aber ich sehe, du bist da schon viel weiter (tolle Arbeit übrigens!). Bei mir funktioniert das ohne SessionVariable, fehlte in der Vorlage. Würde dir demnächst gern ein paar Fragen stellen, wenn ich darf.
Gruß Sam
edit: Wow, wollte mir gerade das zip-File herunterladen, man hat sich das Leben verändert. Ich 'abe gar kein PayPal (Ja, so etwas gibt es noch, ähm, so jemanden). Schade.
Schöne Library - kompliment!
Wäre es noch möglich den Management-Server (ACS) konfigurierbar zu machen (urn:ManagementServer-com:serviceId:ManagementServer1)? Details siehe https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsr ...
Gruß,
Chris
Wäre es noch möglich den Management-Server (ACS) konfigurierbar zu machen (urn:ManagementServer-com:serviceId:ManagementServer1)? Details siehe https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsr ...
Gruß,
Chris
Hi Uwe,
ich habe noch eine Frage: Kann es sein, dass etwas mit dem Encoding nicht stimmt? Wenn ich ein Get-FBTAMMessageList -TAMIndex 1 starte, dann werden Namen mit Umlauten unschön zurückgegeben.
Z.B.: "örin"
Ich hatte das Problem beim Importieren von CSVs, da habe ich diesen Schalter angewandt: -Encoding UTF7.
Gruß
Jürgen
ich habe noch eine Frage: Kann es sein, dass etwas mit dem Encoding nicht stimmt? Wenn ich ein Get-FBTAMMessageList -TAMIndex 1 starte, dann werden Namen mit Umlauten unschön zurückgegeben.
Z.B.: "örin"
Ich hatte das Problem beim Importieren von CSVs, da habe ich diesen Schalter angewandt: -Encoding UTF7.
Gruß
Jürgen
Hallo Colinardo,
ich bin erstmal begeistert!
Aber ich hätte da noch einen Wunsch:
Ähnlich wie hier beschrieben:
https://www.msxfaq.de/tools/prtg/fritzbox_monitoring.htm#upnp_und_soap
würde ich gerne den aktuellen Datendurchsatz der Fritzbox mitloggen und weiterverarbeiten. Dazu müssten die Werte im Bereich WANCommonInterfaceConfig:1#GetAdd-onInfos ausgelesen werden, insbesondere wären NewX_AVM_DE_TotalBytesSent64 und NewX_AVM_DE_TotalBytesReceived64 interessant.
Wäre das noch was, das du in die Wunschliste aufnehmen würdest?
Vorab besten Dank,
Markus
PS: Get-FBWifiConnectedDevicesAsXML wirft bei meiner 7590 einen Fehler:
Ausnahme beim Aufrufen von "DownloadString" mit 1 Argument(en): "Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht
gefunden."
In C:\Scripts\fritzbox_module\fritzbox_module.psm1:1187 Zeichen:156
... pt:secport$($resp.Envelope.Body.'X_AVM-DE_GetWLANDeviceListPathRespon ...
+
+ CategoryInfo : NotSpecified: (
[], MethodInvocationException
+ FullyQualifiedErrorId : WebException
ich bin erstmal begeistert!
Aber ich hätte da noch einen Wunsch:
Ähnlich wie hier beschrieben:
https://www.msxfaq.de/tools/prtg/fritzbox_monitoring.htm#upnp_und_soap
würde ich gerne den aktuellen Datendurchsatz der Fritzbox mitloggen und weiterverarbeiten. Dazu müssten die Werte im Bereich WANCommonInterfaceConfig:1#GetAdd-onInfos ausgelesen werden, insbesondere wären NewX_AVM_DE_TotalBytesSent64 und NewX_AVM_DE_TotalBytesReceived64 interessant.
Wäre das noch was, das du in die Wunschliste aufnehmen würdest?
Vorab besten Dank,
Markus
PS: Get-FBWifiConnectedDevicesAsXML wirft bei meiner 7590 einen Fehler:
Ausnahme beim Aufrufen von "DownloadString" mit 1 Argument(en): "Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht
gefunden."
In C:\Scripts\fritzbox_module\fritzbox_module.psm1:1187 Zeichen:156
... pt:secport$($resp.Envelope.Body.'X_AVM-DE_GetWLANDeviceListPathRespon ...
+
+ CategoryInfo : NotSpecified: (
+ FullyQualifiedErrorId : WebException
Zitat von @colinardo:
Servus LKS,
Servus LKS,
Zitat von @Lochkartenstanzer:
rein der der Interesse halber. Hast Du das Modul auch unter der Powershell für Linux mal getestet?
Ja, läuft hier auf einer derzeit aktuellen PS Version 7.2.2 Core bspw. unter Ubuntu problemlos.rein der der Interesse halber. Hast Du das Modul auch unter der Powershell für Linux mal getestet?
Dann muß ich das mal bei Gelegenheit ausprobieren.
lks
Hallo Uwe,
Frage: Ist bei connect-fritzbox eine Rückmeldung über Erfolg/Misserfolg verfügbar, aufgrund der ich dann meine weiteren Schritte starten oder überspringen kann?
Also sowas wie:
if (Connect-Fritzbox -fqdn $fbox.FBAddress -username $fbox.FBUser -password $fbox.FBPass)
{
bla
}
Hintergrund: ich monitore eine Fritzbox, die über eine eher unzuverlässige VPN-Verbindung erreicht wird. Falls der connect misslingt, werden 0-Werte in meine Datenbank eingetragen. Bisher vermeide ich das, indem ich die FB vor dem connect anpinge und nur bei Erfolg das Weitere ausführe. Geht auch, obiges wäre halt eleganter...
Danke,
Markus
Frage: Ist bei connect-fritzbox eine Rückmeldung über Erfolg/Misserfolg verfügbar, aufgrund der ich dann meine weiteren Schritte starten oder überspringen kann?
Also sowas wie:
if (Connect-Fritzbox -fqdn $fbox.FBAddress -username $fbox.FBUser -password $fbox.FBPass)
{
bla
}
Hintergrund: ich monitore eine Fritzbox, die über eine eher unzuverlässige VPN-Verbindung erreicht wird. Falls der connect misslingt, werden 0-Werte in meine Datenbank eingetragen. Bisher vermeide ich das, indem ich die FB vor dem connect anpinge und nur bei Erfolg das Weitere ausführe. Geht auch, obiges wäre halt eleganter...
Danke,
Markus