colinardo
Goto Top

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

article-picture

back-to-topVorwort


Ich stand vor geraumer Zeit 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.


back-to-topDownload des Powershell-Moduls: FritzBox TR-064 Powershell Modul



back-to-topNö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

screenshot

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), 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.

back-to-topWichtige Informationen


Für Veränderungen von bestimmten Einstellungen des Routers die eine 2 Faktor-Authentifizerung bedingen, muss entweder die 2-Faktor-Bestätigung (System > Fritz!Box-Benutzer > Zusätzliche Bestätigung) deaktiviert werden, oder eine 2FA Session mit der Modul-Funktion Set-FB2FASession -action start des Moduls gestartet und per Button-Press oder Telefon-Code bestätigt werden, da ansonsten die jeweilige Methode mit der Meldung "Ungültge Parameter (402)" oder andere fehl schlägt!

ACHTUNG: Ab FritzOS 7.50 lässt sich eine einmal aktivierte 2FA Authentifizierung nicht mehr deaktivieren, jedoch wird eine 2FA die vor dem Update auf 7.50 deaktiviert war auch nicht automatisch eingeschaltet. Sobald man diese aber einschaltet oder bei einem User die Authenticator-App einrichtet, lässt sich diese nicht mehr deaktivieren!

screenshot

Das Modul funktioniert nur über das interne Netz der Fritzbox, also nicht über den WAN-Port!

back-to-topMomentan enthaltene Funktionen


back-to-topBasis-Funktionen


  • Get-FBInfo : Basisinformationen abrufen
  • Get-FBDeviceLog : Aktuelle Log-Einträ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)
  • Invoke-FBReboot : Fritzbox neu starten
  • Enable-FBDeviceKeyLock : Tastensperre aktivieren (Gerätetasten deaktivieren)
  • Disable-FBDeviceKeyLock : Tastensperre deaktivieren (Gerätetasten aktivieren)
  • Export-FBDeviceConfig : Aktuelle Geräte-Konfiguration in eine Datei exportieren
  • Export-FBVPNConfig : Aktuelle VPN Konfiguration (IPSEC/Wireguard) in eine Datei exportieren

back-to-topFirmware-Management


  • Get-FBFirmwareUpdates : Verfügbare Firmware Updates abfragen
  • Get-FBFirmwareUpdateInfo : Informationen zu vergangenen Firmware-Updates, Update-Policy, Installationsstatus anzeigen
  • Start-FBFirmwareUpdate : Firmware-Update starten
  • Set-FBFirmwareUpdatePolicy : Update-Policy ändern (Nur benachrichtigen, Nur wichtige Updates automatisch installieren, Alle updates automatisch installieren)

back-to-topVerbindungen


  • Invoke-FBDSLDisconnect : DSL-Verbindung trennen

back-to-topPortfreigaben


  • Get-FBPortMappings : Portfreigaben auslesen
  • Add-FBPortMapping : TCP/UDP Portfreigaben erstellen.
  • Remove-FBPortMapping : TCP/UDP Portfreigaben löschen. Achtung: Aktuell in Firmware Versionen 7.27/7.28 wegen Bug in der AVM-Firmware nicht funktionsfähig

back-to-topTelefonie-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
  • Add-FBPhonebook : Telefonbücher hinzufügen
  • Remove-FBPhonebook : Telefonbücher löschen
  • 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 einzelner/mehrerer Rufumleitungen
  • 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

back-to-topDECT


  • Get-FBDECTDeviceList : Alle verfügbaren DECT-Geräte auflisten
  • Get-FBDECTDeviceInfo : Informationen zu bestimmten DECT-Geräten anzeigen (Hinweis: Gültige "deviceID" Werte sind 1 .. 6 for DECT Handgeräte oder 16 .. 415 für DECT ULE Geräte)
  • Get-FBDECTDeviceCount : Anzahl an aktuell verbundenen DECT-Geräten anzeigen
  • Start-FBDECTDeviceUpdate : Softwareupdate eines DECT-Gerätes anstoßen

back-to-topNetzwerk


  • Get-FBHostList : Liste der Hosts im Netzwerk abfragen, optional inkl. DHCP-Leaseinfo
  • Invoke-FBWakeOnLan : Wake-On-Lan Magic-Paket an bekannte Stationen im Netzwerk senden
  • 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

back-to-topWifi


  • 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

back-to-topSpeicherfunktionen 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?)

back-to-topKindersicherung (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

back-to-topRemote-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

back-to-topTR069 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

back-to-topSmarthome Geräte Verwaltung


  • Get-FBSmarthomeDeviceInfo : Informationen von Smarthome-Geräten abfragen (Schalterstatus/Temperatur/Leistung/...)
  • Set-FBSmarthomeSwitch : Smarte Schaltsteckdosen schalten (ON, OFF, TOGGLE)

back-to-top2FA Authentifizierung


  • Get-FB2FAInfo : Information ob die 2FA Authentifizierung auf der Fritzbox aktiv ist
  • Get-FB2FAState : Status einer 2FA Session abfragen
  • Set-FB2FASession : Starten oder Stoppen einer 2FA Authentifizierungs-Session. Sie Session kann zur Zeit nur per Button-Press an der Fritzbox oder Eingabe des angezeigten DTMF-Codes an einem angeschlossenen Telefon bestätigt werden. (TOTP Authenticator Support über TR-064 ist zur Zeit von AVM leider noch nicht implementiert)

back-to-topErläuterungen zur praktischen Nutzung


back-to-topEinbinden 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.

back-to-topErster 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


back-to-topHinweise und Links für Entwickler die die Funktionalität selbst erweitern möchten.


back-to-topDokumentation 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>
Der ServiceType ist eine eindeutige Bezeichnung für den Abschnitt den man konfigurieren oder abfragen möchte. Welche Abschnitte es gibt und welche Aktionen es darin gibt lässt sich der oben verlinkten Dokumentation bei AVM entnehmen. Hat man den gewünschten Dienst gefunden findet man auf der selben Ebene der XML-Datei eine Sub-URL die unter SCPDURL steht. Diese kann man ebenfalls von der Fritzbox abrufen: http://fritz.box:49000/deviceconfigSCPD.xml , also immer die URL an http://fritz.box:49000 angehängt.
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>
Dieser Aktionsname landet dann bei der internen Funktionen New-Request immer im Parameter -action wenn man sich mal eine der CMDLets im Skript anschaut. Zusätzlich muss der Inhalt des Tags serviceType (also das urn:dslforum-org:......) beim Aufruf der New-Request Funktion im Parameter -urn angegeben werden.
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

back-to-topChangelog


1.2.6 (21.03.2024)
  • Kleinere Fixes für das Datumsparsing und Versionserkennung an der Funktion Get-FBDeviceLog vorgenommen (Dank an Thomas für den Hinweis.).
1.2.5 (28.11.2023)
  • + Wake-On-Lan Funktion Invoke-FBWakeOnLan hinzugefügt
1.2.4 (26.06.2023)
  • + 2 Funktionen für den Konfigurationsexport der Geräte- und VPN-Konfiguration (IPSEC/Wireguard) hinzugefügt Export-FBDeviceConfig, Export-FBVPNConfig
1.2.3 (12.06.2023)
  • + 4 Funktionen zum Firmware-Management hinzugefügt Get-FBFirmwareUpdates, Get-FBFirmwareUpdateInfo, Start-FBFirmwareUpdate, Set-FBFirmwareUpdatePolicy
1.2.2 (01.06.2023)
  • + Funktionen Enable-FBDeviceKeyLock und Disable-FBDeviceKeyLock hinzugefügt um die Geräte Tastensperre zu (de-)aktivieren (LUA-Funktion)
1.2.1 (12.05.2023)
  • + Funktion Get-FBDeviceLog hinzugefügt welche aktuelle Log-Einträge über die LUA-Skripte abruft, da über die TR-064 Funktionen selbst leider kein komplettes Log abrufbar ist und dies nur ältere Einträge liefert.
1.2.0 (04.04.2023)
  • + 2FA Authentifizierungs-Funktionen hinzugefügt (Vorbereitung auf zukünftige Funktionen die eine 2FA Authentifizierung zwingend erfordern)
1.1.9 (04.04.2023)
  • Fix: Funktion Get-FBWANDSLSpectrumData überarbeitet und für FritzOS >=7.50 korrigiert
1.1.8 (28.02.2023)
  • + Funktionen Get-FBDECTDeviceList, Get-FBDECTDeviceInfo, Get-FBDECTDeviceCount, Start-FBDECTDeviceUpdate für die Verwaltung von DECT-Gerätschaften hinzugefügt.
1.1.7 (28.02.2023)
  • Fix: Die Funktionen Get-FBWPSInfo, Set-FBWPSConfig im Modul Get-FBWifiWPSInfo, Set-FBWifiWPSConfig umbenannt.
1.1.6 (09.12.2022)
  • Fix: Funktionen Enable-FBStaticRoute, Disable-FBStaticRoute, Remove-FBStaticRoute akzeptieren nun mehrere Routen über die Pipeline.
1.1.5 (17.10.2022)
  • + Funktion Get-FBSmarthomeDeviceInfo zur Abfrage von Smarthome-Geräte-Informationen und Set-FBSmarthomeSwitch zum Schalten von smarten Schaltsteckdosen hinzugefügt.
1.1.4 (10.09.2022)
  • + Funktion Add-FBPhonebook und Remove-FBPhonebook zum Hinzufügen und Entfernen von Telefonbüchern hinzugefügt.
1.1.3 (29.03.2022)
  • Fix: Variablenfehler in der Funktion Get-FBWifiConnectedDevicesAsXML behoben, Funktion Get-FBWANStatistics hinzugefügt.
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.
1.1.1 (16.03.2022)
  • + 3 Funktionen zur Verwaltung der Telefonbücher hinzugefügt und aktualisiert
1.1.0 (02.03.2022)
  • + 3 Funktionen zur Verwaltung der TR069 ACS-Management Einstellungen hinzugefügt
1.0.9 (28.02.2022)
  • Fix: SSL-Problem unter Powershell Version 7 behoben
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.
1.0.7 (18.01.2022)
  • + Funktion um die Live-Daten des DSL-Spektrums abzufragen, hinzugefügt => Get-FBWANDSLSpectrumData.
1.0.6 (15.01.2022)
  • + Funktion um ein benutzerdefiniertes Zertifikat in die Fritzbox zu importieren hinzugefügt => Update-FBCertificate .
1.0.5 (12.01.2022)
  • + Die Funktion Get-FBHostList um einen zusätzlichen Parameter zur Abfrage der DHCP-Lease Informationen ergänzt.
1.0.4 (09.11.2021)
  • + 6 Funktionen für Remote-Zugriff/Dynamic-DNS hinzugefügt.
  • Fix: Ausgaben der Portmapping-Funktionen optimiert.
1.0.3 (08.11.2021)
  • + 6 Funktionen zur Kindersicherung und WAN Zugangsfilter hinzugefügt
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
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
1.0.0 (14.10.2021)
  • + Umwandlung des Skripts in ein echtes Powershell-Modul zur einfacheren Nutzung

Content-ID: 303474

Url: https://administrator.de/tutorial/powershell-fritzbox-ueber-tr-064-im-netzwerk-konfigurieren-und-auslesen-303474.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

aliate
aliate 25.05.2017 um 21:49:15 Uhr
Goto Top
Gibt es eine Möglichkeit die WLAN-Sendeleistung über einen TR064-Befehl einzustellen?
colinardo
colinardo 26.05.2017 aktualisiert um 09:00:25 Uhr
Goto Top
Servus @aliate .
Zitat von @aliate:

Gibt es eine Möglichkeit die WLAN-Sendeleistung über einen TR064-Befehl einzustellen?
Nein. Dazu benötigst du Shellzugriff auf deine Box (bedeutet freetzen oder über Config Hacks ssh/telnet aktivieren)

Grüße Uwe
TaurecTaurec
TaurecTaurec 10.06.2017 um 19:30:33 Uhr
Goto Top
Hallo colinardo,
vielen dank für Deine Arbeit,
da ich mich mit Powershell nicht auskenne bekomme ich es auch leider nicht hin z.B. die FB info anzeigen zu lassen.
Wie oder was muss ich tun um die Infos anzuzeigen?

cu
Taurec
colinardo
colinardo 10.06.2017, aktualisiert am 14.10.2021 um 15:27:46 Uhr
Goto Top
Zitat von @TaurecTaurec:
Hallo colinardo,
vielen dank für Deine Arbeit,
Servus @TaurecTaurec , willkommen auf Administrator.de!
da ich mich mit Powershell nicht auskenne bekomme ich es auch leider nicht hin z.B. die FB info anzeigen zu lassen.
Wie oder was muss ich tun um die Infos anzuzeigen?
Du nimmst obigen Code, fügst diesen in eine Datei mit der Endung .ps1 ein. Dann fügst du unten in der Datei noch ein Get-FBInfo ein um die Funktion aufzurufen, passt ganz oben im Skript wie in der Anleitung beschrieben die Zugangsdaten deiner Fritzbox an und speicherst die Datei.
Dann führst du das Skript folgendermaßen z.B. in einer CMD aus:
powershell -Executionpolicy ByPass -File "C:\Daten\scriptname.ps1"  

Informationen zur praktischen Nutzung des Moduls stehen im Beitrag oben.

Sollten noch Fragen offen sein, bitte PM. Merci.
Grüße Uwe

back-to-topHier noch ein wenig Background-Wissen zum Ausführen von Powershell-Skripten:

back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eineadministrative Powershell-Konsole und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
  • Alternativ lässt sich ein Script auch ohne das globale Ändern der ExecutionPolicy ausführen indem man die Policy als Parameter auf der Kommandozeile mitgibt:
powershell.exe -ExecutionPolicy ByPass -File "C:\Pfad\Script.ps1"
back-to-topStarten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:
"C:\Pfad\script.ps1"
Liegt das Script im selben Verzeichnis in dem man sich gerade befindet, kann man es auch so abkürzen:
.\script.ps1
back-to-topStarten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!
Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
Wenn man dem Script Parameter übergeben möchte:
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
Man kann auch mehrere Scripte hintereinander ausführen lassen:
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
Weitere Parameter zeigt einem ein powershell -? in einer Konsole an.
back-to-topStarten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
TaurecTaurec
TaurecTaurec 10.06.2017 um 20:08:14 Uhr
Goto Top
Hallo Uwe,
vielen Dank für die Hilfe. (auch für die Infos)

Alles funktioniert für mich wie Du beschrieben hast
(für mich sind nur die get Funktionen interessant)

cu Taurec

P.S. wirklich gut gemacht face-smile
colinardo
colinardo 10.06.2017 aktualisiert um 21:59:56 Uhr
Goto Top
Freut mich.

Schönes Wochenende noch.
Uwe
Selfer
Selfer 11.08.2017 um 17:56:59 Uhr
Goto Top
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?
colinardo
colinardo 11.08.2017 aktualisiert um 19:48:07 Uhr
Goto Top
Servus Selfer, willkommen auf Administrator.de!
Freut mich zu hören das dir mein Skript bisher gute Dienste erwiesen hat face-smile.
Zitat von @Selfer:
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?
Leider finde ich hierzu keine entsprechende Kategorie in den Klassen welche die Infos zu den angeschlossenen USB-Geräten kund tun würde.
Du könntest es aber immer noch alternativ über das Webinterface auslesen, s. Skript unten.
Wenn ja, kann man die Infos in eine Datei schreiben lassen?

Alternative über Auslesen des Webinterface (nur mit FW. 6.83 einer FB 7390 getestet, andere FW anderer HTML-Code!)
$fboxurl = 'http://fritz.box'  
$username = ''  
$password = 'GanzGeheim'  

# Helperfunctions
function md5([string]$string){
    [System.BitConverter]::ToString([System.Security.Cryptography.MD5]::Create().ComputeHash((new-object System.Text.UnicodeEncoding).GetBytes($string))).replace('-','').toLower()  
}

function Get-SessionID([string]$url,[string]$user,[string]$pass){
    $xml = irm -Uri "$url/login_sid.lua" -SessionVariable sess -ContentType "application/xml"  
    $sid = $xml.SessionInfo.SID 
    if ($sid -eq '0'*16){  
        $challenge = $xml.SessionInfo.Challenge
        # Response berechnen
        $response = "$challenge-$((md5 "$challenge-$password").Substring(0,32))"  
        $xml = irm -Uri "$url/login_sid.lua" -WebSession $sess -Body @{response=$response;username=$username}  
        $sid = $xml.SessionInfo.SID
    }
    return $sid
}

function Get-PageData([string]$url,[string]$sid,[hashtable]$parameters = @{}){
    $body = $parameters;$body.sid = $sid
    $r = Invoke-WebRequest -Uri $url -Body $body -Method Get
    return $r.Content
}

# Login durchführen / SID holen
$sid = Get-SessionID -url $fboxurl -user $username -pass $password

$data = Get-PageData "$fboxurl/data.lua" -parameters @{page='usbOv'} -sid $sid  
$table = [regex]::match($data,'(?is)<table.*?id="uiViewUsbDevTable".*?>.*?</table>').Value  
$dom = New-Object -Com htmlfile
$dom.IHTMLDocument2_write($table)
$dom.documentElement.InnerText
Das gibt den Inhalt der Tabelle wieder in der evt. angeschlossene Geräte erscheinen.

Hoffe ich konnte dir damit trotzdem weiterhelfen.

Grüße Uwe
Selfer
Selfer 12.08.2017 um 09:52:44 Uhr
Goto Top
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
+ 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 : Ungltiger 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: (:) [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
colinardo
colinardo 12.08.2017 aktualisiert um 10:18:22 Uhr
Goto Top
Ich nutze die FB 7270 V2 (UI) mit der FW 54.06.06. Ich nehme an es liegt daran, wie Du auch angedeutet hast.
So ist es! Die Firmware ist viel zu alt. Bei den neuen Firmwares ab 6.50 hat sich zu viel geändert, als das der obige Code bei dir noch funktionieren könnte (WebIF und URLs komplett anders!).
Wo muss ich suchen, um den richtigen Code für meine Box zu finden.
Zum Auslesen der älteren Firmwares findest du hier im Forum von mir noch Quelltext für Bash-Skripte.
Informationen aus dem Webinterface einer Fritz!Box via Shellscript auslesen
Bitte habe Verständnis das ich für die out of date Firmwares hier keinen kostenlosen Support bieten kann.
Selfer
Selfer 12.08.2017 um 16:55:20 Uhr
Goto Top
Klar, ist verständlich. Trotzdem vielen Dank.
Lochkartenstanzer
Lochkartenstanzer 12.08.2017 um 17:08:57 Uhr
Goto Top
Zitat von @colinardo:

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. face-smile

lks
voumi70
voumi70 24.08.2017 um 03:44:39 Uhr
Goto Top
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. face-wink
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
colinardo
colinardo 24.08.2017 aktualisiert um 13:01:00 Uhr
Goto Top
Gruezi voumi70, willkommen auf Administrator.de!
Über die API lässt es sich hier leider nicht ändern. Aber wie im letzten Beispiel in den Kommentaren geht dies über ein Web-GUI Skript bei dem man den Wert via Post an die /data.lua übermittelt.
Die nötigen Parameter bekommst du ganz leicht wenn du die Seite des Anrufbeantworters aufrufst, dann mit F12 die Browser-Developer Tools aktivierst auf den Netzwerk-Tab wechselst und dann die Einstellung des ABs änderst und auf Speichern klickst. Dann erscheinen die Ajax Posts in den Developer-Tools und dort sieht man welche Parameter für den manuellen Aufruf übermittelt werden müssen.
Da diese je nach Firmware unterschiedlich sind kann ich dir von meiner Seite aus nur Code für eine 7390 mit FW6.83 anbieten. Hast du eine andere Firmware kann ich dir nur anbieten gegen Aufwandsentschädigung deine Firmware zu analysieren und entsprechenden Code bereitzustellen.
Bei Interesse gerne PN.

Viele Grüße
Uwe
existenz2
existenz2 06.01.2018 aktualisiert um 14:59:27 Uhr
Goto Top
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.

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').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
Herbert
Herbert 17.01.2018 um 21:17:02 Uhr
Goto Top
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
Pjordorf
Pjordorf 17.01.2018 um 21:47:48 Uhr
Goto Top
Hallo,

Zitat von @Herbert:
Weißt Du ob das das hart codiert ist oder wie man das ändern kann?
Bau mehr RAM ein und erweiter die Firmware dann kannst du die 1200000 getätigten Anrufe auch im LOG sehen face-smile Oder AVM fragen warum die immer nur von max. 400 Einträge sprechen... face-smile

Gruß,
Peter
colinardo
colinardo 17.01.2018 aktualisiert um 23:44:50 Uhr
Goto Top
Zitat von @Herbert:

Hallo Colinardo,
vielen Dank für das umfangreiche Script und Deine Arbeit.
Servus Herbert, keine Ursache.
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.
Das ist normal, bitte lese dazu
https://avm.de/service/fritzbox/fritzbox-7490/wissensdatenbank/publicati ...

Die Anzahl der Einträge in der Anrufliste ist begrenzt. Die Anrufliste erfasst bis zu 399 Einträge (ein- und ausgehender Gespräche insgesamt). Kommen weitere Einträge hinzu, werden die ältesten Einträge automatisch gelöscht.
Regelmäßiges Auslesen ist also angesagt oder richtige Telefonanlage besorgen.

Grüße Uwe
CAREOLINE
CAREOLINE 30.01.2018 um 15:50:30 Uhr
Goto Top
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.

# Request XML vorbereiten
function InitRequest(){
[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
colinardo
colinardo 31.01.2018, aktualisiert am 14.10.2021 um 15:31:27 Uhr
Goto Top
Servus CAREOLINE,
das ist ein Bug der Fritzbox, wenn alle Parameter korrekt angegeben wurden die Portweiterleitung noch nicht existiert und man die Funktion mehrfach (ca. 10-15 mal) hintereinander aufruft akzeptiert sie den Request irgendwann. Auf den Fehler habe ich AVM schon vor einiger Zeit darauf aufmerksam gemacht, da ich hier nur eine 7390 zum Test habe die ja jetzt nicht mehr mit Updates versorgt wird kann ich nicht sagen ob es schon in neueren Firmware-Versionen gefixt wurde. In der 6.8 auf jeden Fall nicht.
Wichtig ist auch das man die Funktion von dem Rechner ausführen muss für den man eine Portweiterleitung einrichten möchte ansonsten verweigert die Box die Anfrage.

Grüße Uwe
Bugger
Bugger 13.09.2018 um 12:42:01 Uhr
Goto Top
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?
colinardo
colinardo 13.09.2018 aktualisiert um 12:56:00 Uhr
Goto Top
Zitat von @Bugger:
gibt es das auch als bash script?
Servus,
klar, sind alles simple SOAP Requests die du mit curl absetzen kannst:
https://znil.net/index.php?title=FritzBox_Status_Informationen_per_Upnp_ ...
Die Parameter findest du ja oben in der verlinkten Doku von AVM und in meiner Funktion.
Gibt auch eine PHP Bibliothek die du nutzen kannst.
Bugger
Bugger 13.09.2018 um 13:38:21 Uhr
Goto Top
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^^

###=======###
# 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
colinardo
colinardo 13.09.2018, aktualisiert am 04.12.2019 um 12:47:07 Uhr
Goto Top
Für ein Portmapping sieht der zu sendende SOAP-Request als Beispiel so aus:
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:AddPortMapping xmlns:u="urn:dslforum-org:service:WANPPPConnection:1">
      <NewRemoteHost>0.0.0.0</NewRemoteHost>
      <NewExternalPort>25000</NewExternalPort>
      <NewProtocol>TCP</NewProtocol>
      <NewInternalPort>25000</NewInternalPort>
      <NewInternalClient>192.168.1.10</NewInternalClient>
      <NewEnabled>1</NewEnabled>
      <NewPortMappingDescription>Testmapping</NewPortMappingDescription>
      <NewLeaseDuration>0</NewLeaseDuration>
    </u:AddPortMapping>
  </s:Body>
</s:Envelope>
Die Parameter stehen so auch komplett in der Doku im Abschnitt zu der Funktion AddPortMapping ...
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanip ...
https://avm.de/service/schnittstellen/

Ein testweise abgesetztes
curl -k --anyauth -u "USER:PASS" "http://fritz.box:49000/upnp/control/wanpppconn1" -H 'Content-Type: text/xml; charset="utf-8"' -H 'SOAPAction:urn:dslforum-org:service:WANPPPConnection:1#AddPortMapping' --data-binary @request.xml  
wurde hier auf einer 7590 erfolgreich abgesetzt.

Achtung Die interne IP für die Portweiterleitung muss an der Fritze als Client bereits bekannt sein, sonst gibt sie 'ungültiger Parameter' zurück.

Für die Zukunft nutze besser den https Port der Fritze sonst gehen die Credentials plaintext über die Leitung.
Bugger
Bugger 13.09.2018 aktualisiert um 14:48:01 Uhr
Goto Top
Super danke, allerdings bekomme ich 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: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
colinardo
colinardo 13.09.2018 aktualisiert um 15:51:03 Uhr
Goto Top
Wunder mich nicht, die Fritte ist hier sehr penibel was Konventionen angeht du nutzt hier erstens Hochkommas statt Anführungszeichen in deinem Plaintextmails übermittelten XML und der SOAPaction header ist auch Casesensitive. Hier kommt es auf jede Kleinigkeit an. Also mach es so wie ich oben und du wirst sehen es geht.
Weitere Fragen bitte nur via PM, das gehört nicht mehr in diesen Thread. MERCI.
Bugger
Bugger 13.09.2018 um 16:25:00 Uhr
Goto Top
Ich poste hier nochmal abschließend, da es keine Frage ist und evtl. für andere interessant ist face-smile :

Habe es gemacht wie du aber bekomme jetzt den 402 Fehler wie oben. Habe eine 7390 und da funktioniert es wohl einfach nicht. Wird Zeit für was neues. ^^

Trotzdem vielen Dank für deine Unterstützung.
colinardo
colinardo 13.09.2018 aktualisiert um 16:58:10 Uhr
Goto Top
Habe eine 7390
Wird es vermutlich sein, habe meinen Testpark an Routern hier erst vor kurzem aktualisiert. Mit der 7390 gab es in dem Zusammenhang tatsächlich vermehrte Probleme die ist jetzt rausgeflogen, mit der neuen Fritte seither nicht mehr gesehen.
By the way, die ganz alten 7390er (SN beginnend mit A) bekommen seit einigen Monaten den Todesstoß an Telekom DSLAMs. Wenn die T-Com klamm heimlich Vectoring auf die DSLAMs prügelt wollen die alten Fritzen nur noch im Fallback-Modus synchronisieren obwohl vorher problemlos 50MBit/s möglich waren, das Modem der 7390 ist ja bekanntermaßen nicht das beste. Nur leider produziert das für viele neuen Elektroschrott, wenn sie die Dinger nicht als Repeater oder AP oder Telefonanlage an einem neuen Modem weiter nutzen, obwohl das Modem eigentlich noch in Ordnung ist.
SamLowry
SamLowry 19.11.2018 um 21:20:15 Uhr
Goto Top
Hi,

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
colinardo
colinardo 20.11.2018 aktualisiert um 09:25:02 Uhr
Goto Top
Servus Sam,
vielen Dank für deine Rückmeldung, da hatte ich wohl bei der Umstellung die Variable vergessen. Fehler ist korrigiert. Merci.

Grüße Uwe
Daimonion
Daimonion 22.12.2018 um 20:19:19 Uhr
Goto Top
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:

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: (:) , 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
colinardo
colinardo 22.12.2018 aktualisiert um 22:03:56 Uhr
Goto Top
Servus @Daimonion , willkommen auf Administrator.de!
Syntaktisch ist der Bindestrich wahrscheinlich eher der Powershell zuzurechnen, weswegen auch der Fehler
Korrekt.
Ohne die spezielle AVM Funktion jetzt selbst getestet zu haben und nur um die Frage zu beantworten wie man Properties mit Sonderzeichen aufruft, das geht ganz einfach indem du die Property mit Anführungszeichen oder Hochkomma einschließt
$resp.Envelope.body.'X_AVM-DE_GetMeshListPathResponse'  
Frohes Fest
Grüße Uwe
Daimonion
Daimonion 23.12.2018 um 09:59:42 Uhr
Goto Top
Super, danke dir.

So hat es nun auch geklappt. Jetzt mal schauen was die FB noch alles so Preis gibt.

Frohe Weihnachten
Daimonion
Bugger
Bugger 04.12.2019 um 11:58:19 Uhr
Goto Top
Hi,

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.
Lochkartenstanzer
Lochkartenstanzer 04.12.2019 aktualisiert um 12:11:10 Uhr
Goto Top
Zitat von @Bugger:

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
colinardo
colinardo 04.12.2019 aktualisiert um 13:30:20 Uhr
Goto Top
Hallo Bugger,
Die Box nimmt einem übel wenn die Reihenfolge der XML-Tags für das Port-Mapping nicht genau dem in der Doku entspricht. Finde ich nomalerweise überflüssig da auf die XML-Tags ja normalerweise objektorientiert z.B. via XPath zugegriffen wird und da spielt die Reihenfolge ja keinerlei Rolle, aber so what wenn AVM das so will, habe die Reihenfolge der Tags oben im XML-File korrigiert. Im Powershell-Skript hatte ich das schon vor einiger Zeit angepasst.

Die Reihenfolge muss zwingend so eingehalten werden:
NewRemoteHost
NewExternalPort
NewProtocol
NewInternalPort 
NewInternalClient
NewEnabled
NewPortMappingDescription
NewLeaseDuration

Zusätzlich ist folgender Hinweis aus dem PDF von AVM zu beachten:
.... Furthermore hosts can only add port mapping entries for themselves and not for other hosts in the LAN....
Außerdem muss der Host schon in der Liste der Freigaben eingetragen sein, sonst schlägt ein Hinzufügen ebenfalls fehl (Hatte ich oben schon angemerkt).

Wenn du das alles so beachtest dann funktioniert das auf einer aktuellen 7590 (FW 7.12) einwandfrei (getestet).

Grüße Uwe
Bugger
Bugger 04.12.2019 um 15:56:48 Uhr
Goto Top
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. face-smile

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 face-smile
Dieterlem
Dieterlem 09.03.2020 um 22:44:03 Uhr
Goto Top
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
colinardo
colinardo 10.03.2020, aktualisiert am 14.10.2021 um 15:52:10 Uhr
Goto Top
Zitat von @Dieterlem:

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

Hallo Dieterlem, wiillkommen auf Administrator.de!
Danke für deine Nachricht.
Ja das ist möglich. Ich habe dazu die Funktion oben mit einem zusätzlichen optionalen Parameter -phone versehen der es nun ermöglicht die Wählhilfe vor dem Wahlvorgang auf das entsprechende Endgerät umzustellen.

Bitte unbedingt die Hinweise zur Formatierung des Endgerätenamens in den Kommentaren zum Parameter lesen.

Beispiel für Aufrufe

Invoke-FBDialnumber -number 123456789 -phone 'DECT: Büro'  
Invoke-FBDialnumber  -number 123456789 -phone 'ISDN: Telefon A'  
Invoke-FBDialnumber  -number 123456789 -phone 'FON1: Telefon B'  

Wichtiger Hinweis Damit das funktioniert muss die Einstellung für den zweiten Faktor bei der Fritzbox deaktiviert werden (Bestätigung über Telefon oder Google Authenticator) !

Viel Spaß damit.
Grüße Uwe
KB--38
KB--38 11.05.2020 um 22:07:34 Uhr
Goto Top
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:
    $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)?
colinardo
colinardo 12.05.2020 aktualisiert um 09:42:18 Uhr
Goto Top
Servus @KB--38,

freut mich das dir das Skript hilfreich ist face-smile.

Das geschilderte Verhalten liegt daran, dass der Kontakt-XML-String laut Dokumentation ein vollständiges XML-Document ist und somit auch ein eigenes Kodierungsschema besitzen kann. Da du in deiner Data-Struktur die XML-Declaration hier nicht explizit angibst kommt es dazu.
Füge die XML-Declaration mit Encoding-Attribut zu deiner Contact-Struktur hinzu, dann klappt es auch mit den Umlauten.

EInfaches Beispiel:

$result = New-Request -urn 'urn:dslforum-org:service:X_AVM-DE_OnTel:1' -action 'SetPhoneBookEntryUID' -parameter ([ordered]@{  
    NewPhoneBookID = 0
    NewPhonebookEntryData = @'  
<?xml version="1.0" encoding="utf-8"?>  
<contact>
    <category>0</category>
    <person>
	    <realName>Äpfelsoße</realName>
    </person>
    <telephony>
	    <number type="home" prio="0" >1234567890</number>  
    </telephony>
</contact>
'@  
})

$result.Envelope.Body.SetPhonebookEntryUIDResponse

screenshot

Grüße Uwe
KB--38
KB--38 12.05.2020 um 19:32:07 Uhr
Goto Top
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
Marco8383
Marco8383 05.09.2020 um 10:38:48 Uhr
Goto Top
Hallo, da ich schon ewig nach einer Möglichkeit suche und nichts gefunden habe, frage ich mal hier nach face-smile

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...
colinardo
colinardo 05.09.2020, aktualisiert am 06.09.2020 um 09:08:45 Uhr
Goto Top
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,
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  
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:

screenshot

Viel Spaß damit
Grüße Uwe
Marco8383
Marco8383 06.09.2020 um 07:44:09 Uhr
Goto Top
Hallo @colinardo, du bist ja mal krass schnell unterwegs face-smile Hab es eben getestet und es funktioniert super! Vielen DANK! Ich bin begeistert face-smile
colinardo
colinardo 06.09.2020 um 09:08:12 Uhr
Goto Top
Freut mich wenn ich helfen konnte face-smile.
Fritz-Fanboy
Fritz-Fanboy 12.09.2020 um 22:54:31 Uhr
Goto Top
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.
colinardo
colinardo 13.09.2020 aktualisiert um 00:49:12 Uhr
Goto Top
Zitat von @Fritz-Fanboy:

Hallo Zusammen,
Servus auf die Insel.

Kurze Frage, wie bekomme ich die "wandsllinkconfigSCPD.xml" geaendert (re-importiert),
Mit TR-064 überhaupt nicht. Erstens kannst du der Box nicht mit ändern einer XML Datei ein anderes Protokoll beibringen, zweitens müssen spezielle Änderungen für Provider an der Firmware selbst vorgenommen werden, also die Box neu geflasht/gefreezt werden.

PS: Ich weiß allerdings nicht, ob ich zusätzlich auch noch per TR-069 den SKY ISP DHCP Option 60/61 konfigurieren muss.
Funktioniert nicht, diese Optionen muss der Provider mit einer eigenen Firmware konfigurieren. TR-064 ist primär dafür da vorhandene für den Normalouser verfügbaren Funktionen als API bereitzustellen. Für solche Grundlegenden Änderungen ist TR-064 nicht gedacht.
Sky verwendet das Protokoll MER/DHCP 61.
Soweit ich das gelesen habe haben die in letzter Zeit auf standardmäßiges PPPoA gewechselt ohne Identification via DHCP Option , ich würde also nochmal den Provider kontaktieren.

Ich würde mir stattdessen einen kleinen Mikrotik Router beschaffen, da kannst du schalten und walten wie du willst, DHCP Options sind da ein Klacks.

Grüße Uwe
strzata
strzata 30.01.2021 um 14:12:53 Uhr
Goto Top
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
colinardo
colinardo 30.01.2021 aktualisiert um 15:58:50 Uhr
Goto Top
Hallo Norbert.
Freut mich das das Skript dir eine Hilfe ist. 👍
Erst wenn der Angerufene abhebt, klingelt eins unserer Telefone.
Das Verhalten ist normal und von AVM so vorgesehen. Steht auch so in der Doku von AVM. => https://service.avm.de/help/de/FRITZ-Box-Fon-WLAN-7490/017p1/hilfe_fon_w ...
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?
Du kannst auch ohne schon ohne das das entsprechende Telefon erst klingelt den Hörer des Telefons das in der Wahlhilfe angegeben ist abnehmen, du wirst dann direkt ohne Umwege mit der Wahl-Leitung verbunden die du mit der Wahlhilfe angewählt hast, wenn das Telefon direkt an der FB hängt oder damit verbunden ist (DECT/TAE/IP).

Grüße Uwe
strzata
strzata 30.01.2021 um 19:48:58 Uhr
Goto Top
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
colinardo
colinardo 30.01.2021, aktualisiert am 01.02.2021 um 12:21:06 Uhr
Goto Top
Zitat von @strzata:

Gibts auch kein Event?
Nein, TR-064 kennt leider kein Event-Subscription.
Kann man wenigstens mit einer Funktion abfragen, ob der gerufene Teilnehmer besetzt ist?
Das wird schwierig wenn überhaupt würde ich hier eine vernünftig konfigurierbare Telefonanlage einsetzen (z.B mit einer Asterisk wäre das alles kein Thema), oder TAPI mit entsprechendem Equipment am Tresen. Schau dir mal die nativen TAPI Funktionen von Windows an, damit kannst du auch problemlos via Code einen Wahlvorgang initiieren.

@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.
Mach ich gerne, keine Ursache.

Grüße Uwe
strzata
strzata 31.01.2021 um 09:52:31 Uhr
Goto Top
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
colinardo
colinardo 31.01.2021 aktualisiert um 11:43:58 Uhr
Goto Top
Zitat von @strzata:

Und ich glaube, es gibt auch einen TAPI-Treiber dazu. Mehr weiss ich aber darüber nicht.
Die TAPI3 Lib ist ziemlich einfach zu handhaben, sind nur wenige Zeilen Code und in C# oder VB.NET problemlos nutzbar.
https://docs.microsoft.com/en-us/windows/win32/tapi/tapi-3-1-start-page
Wenn du mehr Infos oder Code zur Lib brauchst kurze PN.
oodoloo
oodoloo 13.07.2021 um 13:15:52 Uhr
Goto Top
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
colinardo
colinardo 13.07.2021 aktualisiert um 15:32:00 Uhr
Goto Top
Servus Dennis.
Zitat von @oodoloo:
Ich erhalte leider immer die folgende Fehlermeldung:
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
OK.
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.
Natürlich Blödsinn da hatte der Supporter keine Ahnung von TR-064 face-smile.
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!
Ist die 2 Faktor-Bestätigung von Aktionen per Telefon/Authenticator App bei dir aktiviert (System > Fritz!BOX-Benutzer > Zusätzliche Bestätigung)? Wenn ja dann geht das per Skript nicht. Diese Einstellung muss dafür zwingend deaktiviert werden.
Ansonsten lege den Rechner mal manuell in den Freigaben an und lösche dann nur die Portfreigabe und lass den Rechner aber weiterhin in der Liste drin, so dass nur der Rechner ohne Freigabe dort drin steht, und starte dann erneut das Skript. Bei manchen Boxen ist das Ausführen der Funktion auch manchmal erst bei mehrmaligen hintereinander ausführen erfolgreich.

Klappt hier im Test noch einwandfrei mit einer 7590 mit FW 07.27.

Grüße Uwe
oodoloo
oodoloo 13.07.2021 aktualisiert um 18:45:27 Uhr
Goto Top
Hi Uwe,

danke dir für deine schnelle Rückmeldung!
Tja, so einfach kann es manchmal sein face-smile! 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
colinardo
colinardo 13.07.2021 um 18:50:10 Uhr
Goto Top
Tja, so einfach kann es manchmal sein face-smile face-smile! Das Abschalten der 2-Faktor-Bestätigung war scheinbar der ausschlaggebende Tipp!
👍
Vielen Dank für deine Hilfe!
Immer gerne.
speedy7.1
speedy7.1 17.07.2021 aktualisiert um 02:54:02 Uhr
Goto Top
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:
# 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
colinardo
colinardo 18.07.2021 aktualisiert um 17:18:05 Uhr
Goto Top
Servus @speedy7.1 .
Zitat von @speedy7.1:

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.
Danke für die 💐 face-smile.
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.
Herzlichen Dank für deinen Beitrag 👍. Habe die Funktion noch etwas optimiert und oben ergänzt, zusätzlich die Funktion zum Update von Einträgen habe ich dir schon mal abgenommen. Zusätzlich auch noch ein paar Wifi-Funktionen ergänzt wenn man gerade dabei ist.
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?
Nein, das bleibt an seiner Geburtsstätte bei Administrator.de face-wink.

Grüße Uwe
Itschi
Itschi 19.09.2021 um 12:49:51 Uhr
Goto Top
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 .

<?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.
colinardo
colinardo 19.09.2021 aktualisiert um 15:17:18 Uhr
Goto Top
"Hallo" @Itschi erst einmal, so viel Zeit sollte eigentlich immer noch sein!
Zitat von @Itschi:

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 .

Die Funktion Delete-FBPortmapping hat ja auch eigentlich nur zwei Parameter namens -ExternalPort und -Protocol, aber seit der neuen Firmware 7.27 funktioniert das Löschen der Portfreigaben via tr-064 nicht mehr, ist wohl ein Firmware-Bug. Kann ich hier auch nachstellen, das Löschen funktioniert definitiv nicht mehr, daran kann ich hier leider auch nichts ändern.
https://www.ip-phone-forum.de/threads/tr-064-addportmapping-fritz-box-74 ...

Grüße Uwe
Itschi
Itschi 19.09.2021 aktualisiert um 15:28:36 Uhr
Goto Top
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...
Marco8383
Marco8383 07.10.2021 aktualisiert um 12:15:11 Uhr
Goto Top
Zitat von @colinardo:

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,
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  
> 
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:

screenshot

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?
colinardo
colinardo 07.10.2021 aktualisiert um 12:14:30 Uhr
Goto Top
Servus @Marco8383 .
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.
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
Marco8383
Marco8383 12.10.2021 um 06:29:14 Uhr
Goto Top
Servus @Marco8383 .
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.
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".
149736
149736 12.10.2021 um 15:08:55 Uhr
Goto Top
Ist es möglich mit dem Skript eine PPPoE Konfiguration zu manipulieren/erstellen? Rufnummern hinzuzufügen und SIP-Kennungen einzugeben?
colinardo
colinardo 12.10.2021 aktualisiert um 17:01:08 Uhr
Goto Top
Hallo erst einmal @149736, willkommen auf Administrator.de!
Zitat von @149736:

Ist es möglich mit dem Skript eine PPPoE Konfiguration zu manipulieren/erstellen?
Es ist zwar noch keine explizite Funktion dafür im Skript selbst integriert, Username, Password, etc. der PPPoE Config lassen sich damit aber problemlos ändern, siehe:
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpp ...

Rufnummern hinzuzufügen und SIP-Kennungen einzugeben?
Auch hier gilt das gleiche, es ist noch keine einfache Funktion im Skript selbst vorhanden lässt sich aber leicht selbst ergänzen, siehe dazu die Funktion X_AVM-DE_AddVoIPAccount in der Doku
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voi ...

Grüße Uwe
Adnimistrator
Adnimistrator 03.11.2021 um 16:30:49 Uhr
Goto Top
Die Portforwarding Commands funktionieren alle nicht auf meiner FB 6591 Cable mit FW 07.28.

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>
colinardo
colinardo 03.11.2021 aktualisiert um 16:59:48 Uhr
Goto Top
Zitat von @Adnimistrator:

Die Portforwarding Commands funktionieren alle nicht auf meiner FB 6591 Cable mit FW 07.28.

Servus,
das wundert nicht denn diese wurden nur für einen DSL-Anschluss hinterlegt, für Kabel-Anschlüsse muss die Service-URL angepasst werden. Steht auch oben im Beitrag.

Zitat:

Die Funktionen die die DSL-Infos auslesen sind spezifisch auf das DSL-PPPoE-Interface ausgelegt, d.h. also wenn eure Fritzbox keine direkte PPPoE DSL-Verbindung aufbaut sondern das Internet z.B. über LAN1 oder einen Kabelanschluss bezieht, müssen die Funktionen angepasst werden. Das geschieht in jeder Funktion über die Parameter -URN und -action. Diese Strings findet man in der Dienstbeschreibungs-XML-Datei seiner FritzBox.

Dort finden sich zum WAN folgende Services:

urn:dslforum-org:service:WANDSLLinkConfig:1
urn:dslforum-org:service:WANEthernetLinkConfig:1
urn:dslforum-org:service:WANPPPConnection:1
urn:dslforum-org:service:WANIPConnection:1

Bei Kabelboxen sollte es die ServiceID urn:dslforum-org:service:WANIPConnection:1 sein.


Grüße Uwe
Adnimistrator
Adnimistrator 03.11.2021 um 17:32:33 Uhr
Goto Top
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?
colinardo
colinardo 03.11.2021 aktualisiert um 17:44:33 Uhr
Goto Top
Zitat von @Adnimistrator:
$action Variable im New-Request "anschauen" - oder editieren?
Soll ich das Modul editieren?
Müssen die Moduldateien geändert werden?
Ja, die Funktion muss im Modul angepasst werde. Habe das jetzt für dich mal übernommen und die Funktionen jetzt gerade mal so angepasst, dass für die unterschiedlichen WAN-Verbindungsarten die passende "urn" benutzt wird. Hatte das bisher noch nicht eingebaut ist jetzt aber aktualisiert.
Adnimistrator
Adnimistrator 03.11.2021 um 18:05:25 Uhr
Goto Top
Danke, ich habe das zip File erneut heruntergeladen und habe die 2 Files ersetzt. Auch noch Import-Module (...) ausgeführt, aber ich erhalte die selbe Fehlerresponse.
Waren die Files auf dem Webserver erneuert?
colinardo
colinardo 03.11.2021 aktualisiert um 18:31:09 Uhr
Goto Top
Zitat von @Adnimistrator:

Danke, ich habe das zip File erneut heruntergeladen und habe die 2 Files ersetzt. Auch noch Import-Module (...) ausgeführt, aber ich erhalte die selbe Fehlerresponse.
Waren die Files auf dem Webserver erneuert?
Ja natürlich. Entweder Powershell Session beenden oder vor dem neu Laden remove-module fritzbox_module ausführen.

Hast du auch den Punkt oben unter Wichtige Information zum Fehler 402 gelesen? Wenn die 2FA Authentifizierung auf der BOX aktiviert ist kommt es in der Regel ebenfalls zu diesem Fehler.

Bitte bei weiteren Fragen => PN Merci.

Schönen Abend.
Adnimistrator
Adnimistrator 03.11.2021 um 18:38:01 Uhr
Goto Top
Remove Module und auch neue Session habe ich gemacht. 2 Factor Auth ist deaktiviert.
Immer noch der selbe Fehler. Muss die FritzBox neu gestartet werden?
colinardo
colinardo 04.11.2021 aktualisiert um 09:40:14 Uhr
Goto Top
Zitat von @Adnimistrator:

Remove Module und auch neue Session habe ich gemacht. 2 Factor Auth ist deaktiviert.
Immer noch der selbe Fehler. Muss die FritzBox neu gestartet werden?
Nein ein Reboot ist in der Regel nicht nötig kann aber nicht schaden je nachdem was du schon so alles umgestellt hast.

Habe das Modul einem Kollegen der das mal Testweise mit einer FB 6591 Cable mit aktueller Firmware testen kann zur Verfügung gestellt. Ergebnis:

screenshot

Also Ergebnis wie erwartet.
Bei deiner Box stimmt also etwas nicht. Vielleicht eine gebrandete Box bei der die Abfragen durch den Provider blockiert werden.
Adnimistrator
Adnimistrator 14.11.2021 um 20:15:09 Uhr
Goto Top
Die Box ist mein Eigentum. Ganz normal gekauft. Sie hat das neuest e OS drauf.

Ich verwerfe die Idee, sie mit Powershell zu administrieren.
Vielen Dank für den Versuch.
amdinistrator
amdinistrator 12.01.2022 um 12:39:37 Uhr
Goto Top
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...
colinardo
colinardo 12.01.2022 aktualisiert um 13:50:27 Uhr
Goto Top
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...

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:

screenshot

Grüße Uwe
amdinistrator
amdinistrator 12.01.2022 um 14:20:41 Uhr
Goto Top
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

Zitat von @colinardo:

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

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:

screenshot

Grüße Uwe
colinardo
colinardo 12.01.2022 aktualisiert um 14:39:16 Uhr
Goto Top
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.
amdinistrator
amdinistrator 12.01.2022 um 14:42:42 Uhr
Goto Top
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.
colinardo
colinardo 12.01.2022 aktualisiert um 15:07:06 Uhr
Goto Top
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.
amdinistrator
amdinistrator 12.01.2022 um 17:19:07 Uhr
Goto Top
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.

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
colinardo 12.01.2022, aktualisiert am 15.01.2022 um 16:05:33 Uhr
Goto Top
Zitat von @amdinistrator:
Irgendwo muss die Info doch sein, die Box zeigt die Info im UI ja auch an...
Klar ist die irgendwo dort hinterlegt, aber das Skript hier beschränkt sich auf die über TR-064 angebotenen Funktionen und da bist du nunmal beschränkt.
Siehe selbst https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hosts ...

Ich kann dir zwar jetzt was übers UI skripten, aber das hält dann eben nur bis zum nächsten UI Update von AVM, ist eben nicht nachhaltig face-wink.

#edit# DHCP LeaseInfo über die UI-Funktionen auslesen
$fboxurl = 'http://fritz.box'  
$username = 'USERNAME'  
$password = 'PASSWORD'  

# Helperfunctions
function md5([string]$string){
    [System.BitConverter]::ToString([System.Security.Cryptography.MD5]::Create().ComputeHash((new-object System.Text.UnicodeEncoding).GetBytes($string))).replace('-','').toLower()  
}

function Get-SessionID([string]$url,[string]$user,[string]$pass){
    $xml = irm -Uri "$url/login_sid.lua" -SessionVariable ws -ContentType "application/xml"  

    $sid = $xml.SessionInfo.SID 
    if ($sid -eq '0000000000000000'){  
        $challenge = $xml.SessionInfo.Challenge
        # Response berechnen
        $response = "$challenge-$((md5 "$challenge-$password").Substring(0,32))"  
        $xml = irm -Uri "$url/login_sid.lua" -WebSession $ws -Body @{response=$response;username=$username}  
        $sid = $xml.SessionInfo.SID
    }
    return $sid
}

function Get-PageData([string]$url,[string]$sid,[hashtable]$parameters = @{},[string]$method = "Get"){  
    $body = $parameters;$body.sid = $sid
    $r = Invoke-WebRequest -Uri $url -Body $body -Method $method -headers @{Referer=$fboxurl}
    return $r.Content
}

# Login durchführen / SID holen
$sid = Get-SessionID -url $fboxurl -user $username -pass $password
# devices auslesen
$devices = Get-PageData "$fboxurl/data.lua" -sid $sid -method Post -parameters @{page='netDev';useajax='1';xhrId=''} | ConvertFrom-Json  
# für aktive und passive devices den DHCP Status auslesen 
$devices.data.active + $devices.data.passive  | select Name,Port,Mac,@{n='StaticLease';e={(Get-PageData "$fboxurl/data.lua" -sid $sid -method Post -parameters @{page='edit_device';dev=$_.UID} | ConvertFrom-Json).data.vars.dev.ipv4.dhcp.alwaysSameIp}}  
SamLowry
SamLowry 14.01.2022 aktualisiert um 13:52:29 Uhr
Goto Top
@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.
colinardo
colinardo 14.01.2022, aktualisiert am 15.01.2022 um 16:06:46 Uhr
Goto Top
Servus Sam
Zitat von @SamLowry:
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"
Nein, da fehlt keins, weil hier erst mal nur ein Name definiert wird und keine Variable genutzt wird face-wink.

screenshot

Erst wenn du die Variable über den Parameter -WebSession nutzt brauchst du das Dollarzeichen für den Variablenverweis.
Bei mir funktioniert das ohne SessionVariable, fehlte in der Vorlage.
Ja weil (noch) keine Cookies genutzt werden, aber für den Fall der Fälle falls AVM da auf eine Idee kommt schon mal vorgesorgt face-smile.
Würde dir demnächst gern ein paar Fragen stellen, wenn ich darf.
Dann aber bitte per PN und nicht hier im Beitrag. Merci.

Ich bin dabei, mir nach einer Linux-Skriptvorlage etwas zu schreiben, um ein Zertifikat hochzuladen.
Kann das Powershell-Modul nun auch mittels Funktion Update-FBCertificate.

Grüße Uwe
T-Punkt
T-Punkt 17.01.2022 um 18:10:36 Uhr
Goto Top
Kann ich mit Deinem Powershell-Modul auch ohne auf diesem Gebiet Experte zu sein eine interne Rufnummer konfigurieren?

VG T-Punkt
colinardo
colinardo 17.01.2022 aktualisiert um 18:39:13 Uhr
Goto Top
Zitat von @T-Punkt:

Kann ich mit Deinem Powershell-Modul auch ohne auf diesem Gebiet Experte zu sein eine interne Rufnummer konfigurieren?

VG T-Punkt
Servus @T-Punkt, willkommen auf Administrator.de!
Danke für deine Anfrage.
Was bedeutet für ich "interne Rufnummer konfigurieren" konkret? Das kann leider viel bedeuten.
Die zur Zeit vom Modul unterstützten Funktionen sind oben im Beitrag aufgelistet. Das Konfigurieren intern angelegter Rufnummern ist mit den von AVM bereitgestellten Funktionen nur bei internen VoIP Clients möglich. Darüber hinaus gehende Konfiguration von Rufnummern ist mit dem Modul zur Zeit leider nicht möglich.
Dies lässt sich zur Zeit nur über die im Webinterface zur Verfügung stehenden Skripte ermöglichen.
Bei Bedarf kann ich hierzu ein passendes Skript für eine 7590 bereitstellen wenn du mir Details zur gewünschten Konfiguration und Funktionalität per PN mitteilst.

Grüße Uwe
jklpuz
jklpuz 18.01.2022 um 13:54:47 Uhr
Goto Top
Moin!

Kurze Frage: Ist es möglich über die Powershell Skripte bzw. allgemein über die TR-064 Schnittstelle, sich das DSL Spektrum (live) zu ziehen? Gern auch nur die Rohdaten, lassen sich sicherlich auch ähnlich zu der Grafik in der GUI plotten.
colinardo
colinardo 18.01.2022 aktualisiert um 16:12:43 Uhr
Goto Top
Zitat von @jklpuz:

Moin!

Kurze Frage: Ist es möglich über die Powershell Skripte bzw. allgemein über die TR-064 Schnittstelle, sich das DSL Spektrum (live) zu ziehen? Gern auch nur die Rohdaten, lassen sich sicherlich auch ähnlich zu der Grafik in der GUI plotten.

Servus @jklpuz, willkommen auf Administrator.de!

Per TR-064 gibt es dafür keine direkte Funktion, aber über die Ajax-Funktionen der Fritzbox kommst du an die Rohdaten ran, habe die entsprechende Funktion gerade meinem Modul mit der Funktion Get-FBWANDSLSpectrumData hinzugefügt. Hier eine Beispiel-Ausgabe der gelieferten Daten. Natürlich ist es ein Object und man kommt an alle aufgeführten Daten über die Eigenschaften heran.

screenshot

Grüße Uwe
xmasmc
xmasmc 19.02.2022 um 15:08:55 Uhr
Goto Top
Get-FBCallList CSV Ausgabe
Hallo, super Modul, Danke
Gibt es eine einfache Möglichkeit die Ausgabe von Get-FBCallList so zu ändern, dass ich CSV Daten erhalte ?
Bin leider mit powershell Befehlen nicht vertraut.
Danke
colinardo
colinardo 19.02.2022 aktualisiert um 18:17:34 Uhr
Goto Top
Servus @xmasmc, willommen auf Administrator.de!
Zitat von @xmasmc:

Get-FBCallList CSV Ausgabe
Hallo, super Modul, Danke
Danke für die Blumen face-smile.
Gibt es eine einfache Möglichkeit die Ausgabe von Get-FBCallList so zu ändern, dass ich CSV Daten erhalte ?
Kein Thema, die Daten liegen schon im richtigen Format zum pipen an Export-Csv vor
Get-FBCallList | export-csv 'D:\anrufliste.csv' -Delimiter ';' -NoType -Encoding UTF8  
Du kannst dir auch auf die schnelle eine grafische Liste zum Filtern/Auswerten zaubern mittels Out-GridView
Get-FBCallList | Out-Gridview
Grüße Uwe

p.s. habe die Funktion auch noch um zwei weitere Ausgabeformate ergänzt um die Einträge nach Monaten gruppiert auszugeben oder um die Summen von ausgehenden Gesprächen nach Monaten und Nummern gruppiert auszugeben, falls es jemand braucht.

screenshot
xmasmc
xmasmc 19.02.2022 um 16:56:09 Uhr
Goto Top
DANKE ist ja super einfach
ctr612
ctr612 01.03.2022 um 18:21:06 Uhr
Goto Top
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
colinardo
colinardo 01.03.2022 aktualisiert um 19:06:45 Uhr
Goto Top
Servus Chris
Zitat von @ctr612:

Schöne Library - kompliment!
Danke für die Blumen 🙂.
Wäre es noch möglich den Management-Server (ACS) konfigurierbar zu machen (urn:ManagementServer-com:serviceId:ManagementServer1)?
Das sollte kein Problem darstellen. Integriere ich die nächsten Tage noch ins Modul. Melde mich dann nochmal.

Grüße Uwe
colinardo
colinardo 02.03.2022 aktualisiert um 12:05:53 Uhr
Goto Top
Zitat von @ctr612:
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 ...
Here you go:

Mit Version 1.1.0 habe ich 3 weitere Funktionen dafür hinzugefügt

TR069 ACS-Management Verwaltung

Get-FBManagementSettingsSet-FBManagementSettingsReset-FBManagementSettings

Viel Spaß damit.

Grüße Uwe
ctr612
ctr612 02.03.2022 um 12:16:40 Uhr
Goto Top
Tausend Dank, das ist ja schneller als die Feuerwehr. Werde am Wochenende mal damit testen!

Gruß,
Chris
MachtMuschel
MachtMuschel 15.03.2022 um 20:07:42 Uhr
Goto Top
Moin colinardo,

gibt es einen Grund, warum du keine Funktion zum Löschen von Telefonbucheinträgen gebaut hast?

Viele Grüße
colinardo
colinardo 15.03.2022 aktualisiert um 22:04:40 Uhr
Goto Top
Zitat von @MachtMuschel:

Moin colinardo,

gibt es einen Grund, warum du keine Funktion zum Löschen von Telefonbucheinträgen gebaut hast?

Viele Grüße

Servus @MachtMuschel,
ja den gibt es, nämlich schlicht übersehen
🙃. Danke für die Info.
Hole ich aber sofort morgen mit einem Update nach, wie gesagt das Teil entwickelt sich und ich kann halt nur in meiner Freizeit daran weiter arbeiten.

Grüße Uwe
MachtMuschel
MachtMuschel 15.03.2022 um 22:42:33 Uhr
Goto Top
Hi Uwe,

alles klar und ich dachte schon, ich sei blind ;)

Viele Grüße
Jürgen
colinardo
colinardo 16.03.2022, aktualisiert am 21.03.2022 um 10:02:34 Uhr
Goto Top
@MachtMuschel (Jürgen):

Update ist online, mit Version 1.1.1 wurden 3 neue Funktionen für die Telefonbücher und Einträge hinzugefügt, darunter unter anderem auch eine neue Funktion namens Export-FBPhoneBookAsOutlookCSV Export-FBPhonebook mit der sich Telefonbücher wahlweise in XML oder Outlook kompatible CSV Dateien lokal abspeichern lassen.

Viel Spaß damit.

Grüße Uwe
MachtMuschel
MachtMuschel 16.03.2022 um 16:09:18 Uhr
Goto Top
Hey Uwe,

super! Sehe ich das richtig, dass jetzt auch durch Löschung und Neuanlegen eines PhoneBookEntries eine Namensänderung möglich wird?

Viele Grüße
Jürgen
colinardo
colinardo 16.03.2022 aktualisiert um 16:58:49 Uhr
Goto Top
Zitat von @MachtMuschel:
super! Sehe ich das richtig, dass jetzt auch durch Löschung und Neuanlegen eine PhoneBookEntries eine Namensänderung möglich wird?
Das ging schon vorher, eine Löschung des Eintrags ist auch nicht nötig. Update-FBPhonebookEntry gab es schon vorher und das erledigt auch eine Umbenennung face-wink.
MachtMuschel
MachtMuschel 16.03.2022 um 16:59:29 Uhr
Goto Top
Ok, ich hatte bis jetzt nur mit dem Update der Telefonnummern rumgespielt. Danke..
MachtMuschel
MachtMuschel 21.03.2022 um 06:47:59 Uhr
Goto Top
Moin Uwe,

wie sieht es mit einer Funktion zum Sichern des komplette Adressbuches im xml-Format aus, also so wie die Standardsicherung über die FB-GUI?

Viele Grüße
Jürgen
colinardo
colinardo 21.03.2022 aktualisiert um 10:01:34 Uhr
Goto Top
Zitat von @MachtMuschel:

Moin Uwe,

wie sieht es mit einer Funktion zum Sichern des komplette Adressbuches im xml-Format aus, also so wie die Standardsicherung über die FB-GUI?

Viele Grüße
Jürgen

Auch kein Problem, die wandele ich ja schon mit der Funktion Export-FBPhonebookAsOutlookCSV um, aber wenn du sie als Original XML haben willst baue ich dafür auch noch ne Funktion, bzw. baue die jetzige so um das man das gewünschte Format per Parameter wählen kann. Den Code zum Download der XML findest du bereits in der o.g. Funktion.

# edit: 21.03.2022 10:01 # Die Funktion vorherige Funktion Export-FBPhonebookAsOutlookCSV wurde konsolidiert und umbenannt in Export-FBPhonebook und enthält nun den wahlweisen Export in das XML oder CSV Format.

Grüße Uwe
MachtMuschel
MachtMuschel 21.03.2022 um 11:25:08 Uhr
Goto Top
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
colinardo
colinardo 21.03.2022 aktualisiert um 11:45:53 Uhr
Goto Top
Zitat von @MachtMuschel:
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.
Fehler ist nun behoben.

Merci für deine Mitteilung.
MachtMuschel
MachtMuschel 21.03.2022 um 12:27:39 Uhr
Goto Top
Danke dir..
msroedel
msroedel 29.03.2022 aktualisiert um 16:41:31 Uhr
Goto Top
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 ...

back-to-top

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : WebException
colinardo
colinardo 29.03.2022 um 17:08:43 Uhr
Goto Top
Servus Markus,
werde ich bei Zeiten noch ergänzen.

Get-FBWifiConnectedDevicesAsXML
Bezüglich des Fehlers der o.g. Funktion, den konnte ich mit kurz drüber schauen ermitteln, ist ein Variablen-Tippfehler, behebe ich schnellst möglich. Danke für deine Rückmeldung!

Grüße Uwe
Lochkartenstanzer
Lochkartenstanzer 29.03.2022 um 17:47:20 Uhr
Goto Top
Hallo Uwe,

rein der der Interesse halber. Hast Du das Modul auch unter der Powershell für Linux mal getestet?

lks
colinardo
colinardo 29.03.2022 aktualisiert um 18:06:29 Uhr
Goto Top
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.

screenshot

Grüße Uwe
colinardo
colinardo 29.03.2022 aktualisiert um 18:21:42 Uhr
Goto Top
@msroedel

Mit Version 1.1.3 ist der Fehler in der Funktion Get-FBWifiConnectedDevicesAsXML behoben und die zusätzliche Funktion Get-FBWANStatistics hinzugekommen die die gewünschten Informationen enthält.

Hope this helps face-wink

Grüße Uwe
Lochkartenstanzer
Lochkartenstanzer 29.03.2022 um 18:19:16 Uhr
Goto Top
Zitat von @colinardo:

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.

Dann muß ich das mal bei Gelegenheit ausprobieren.

lks
msroedel
msroedel 29.03.2022 um 20:23:21 Uhr
Goto Top
Hallo Uwe,
wow, das ging ja flott!
Hab's mir grad mal angesehen und bin begeistert - tut, was es soll und spart mir endlos Code.

Besten Dank!
Markus
msroedel
msroedel 04.04.2022 um 08:39:45 Uhr
Goto Top
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
colinardo
colinardo 04.04.2022 aktualisiert um 09:38:06 Uhr
Goto Top
Servus Markus.
Die Fehlerbehandlung des Moduls läuft über "Exceptions". Die Funktion prüft eine erfolgreiche Verbindung mit den übergebenen Credentials. Wenn der Test fehl schlägt wirft sie eine Exception. Diese kannst du dann mittels Try Catch abfangen
try{
    Connect-Fritzbox -fqdn $fbox.FBAddress -username $fbox.FBUser -password $fbox.FBPass
    # alles was hier an Befehlen kommt wird nur ausgeführt wenn keine Exception geworfen wurde.
}catch{
    # hier kannst du Fehler ausgeben oder loggen/benachrichtigen etc.
    write-host $_.Exception.Message -F Red
}
Genauso kannst du alle anderen Aufrufe/Funktionen behandeln.

Grüße Uwe
msroedel
msroedel 04.04.2022 um 09:14:18 Uhr
Goto Top
Sehr gut - klappt super!

Besten Dank!
Markus
Veutan
Veutan 09.09.2022 um 20:25:11 Uhr
Goto Top
Hallo. Besten Dank für das super Script. Es macht seine Arbeit gut.

Gibt es eine Funktion um das Adressbuch komplett zu löschen und anzulegen?

Grüße
Veit
colinardo
colinardo 09.09.2022, aktualisiert am 10.09.2022 um 10:14:50 Uhr
Goto Top
Servus Veit,
freut mich für dich. 👍
Zitat von @Veutan:
Gibt es eine Funktion um das Adressbuch komplett zu löschen und anzulegen?
Ja die gibt es, die Funktionalität werde ich morgen noch ergänzen. Das Standard-Adressbuch lässt sich aber nicht gänzlich entfernen, nur dessen Einträge so daß es komplett leer ist. Selber angelegte Adressbücher hingegen können problemlos auch wieder gelöscht werden.

#edit: 10.09.2022: 10:12# Mit Version 1.1.4 wurden zwei Funktionen hinzugefügt die das Hinzufügen und Löschen von Telefonbüchern ermöglichen. Viel Spaß damit.
# Add phonebook
Add-FBPhonebook -Name "Friends"  

# remove phonebook
Remove-FBPhonebook -Name "Friends"  

Grüße Uwe
Veutan
Veutan 10.09.2022 um 15:11:01 Uhr
Goto Top
Hallo Uwe,

Zitat von @colinardo:
Viel Spaß damit.
Das ging aber fix. Gleich probiert.
Danke für deine Arbeit!

Ich hoffe, dass mir die Fritzbox das tägliche löschen und wieder befüllen nicht übel nimmt. Wenn ja werde ich berichten.

Grüße Veit
RaimoK
RaimoK 14.10.2022 um 14:10:13 Uhr
Goto Top
Hallo Uwe,

ich bin auf der Suche nach einer automatisierten Abfrage einer schaltbaren Steckdose Fritz!Dect 210 auf diese Seite gestoßen und begeistert von deiner Arbeit. Vielen Dank dafür!

Leider habe ich mit Powershell keine Erfahrungen, dank der super Erklärungen haben das Einbinden des Modules und die Abfrage z.B. mit Get FBCalllist aber auf Anhieb funktioniert.

Wie kann ich aktuelle Werte (Leistung, Temperatur) der smarten Steckdose mit einem PS-Script abfragen? Ich finde keine passende Funktion in der obigen Liste...

Viele Grüße, Raimo
colinardo
colinardo 14.10.2022, aktualisiert am 19.10.2022 um 08:34:01 Uhr
Goto Top
Servus Raimo,
mangels Smarthome Hardware zum Testen sind die Funktionen zur Zeit nicht enthalten. (ab Version 1.1.5 nun enthalten) Auf gut Glück möchte ich diese aber nicht so einfach in ein produktives Modul hinzufügen.

Ich kann dir aber gerne mal eine Prototyp-Funktion zum Abfragen der Infos bereitstellen dann kannst du sie bei dir testen. => PN

Grüße Uwe
RaimoK
RaimoK 14.10.2022 um 15:42:58 Uhr
Goto Top
Super schnelle Antwort - Danke!

Ich bin schon etwas älter, habe früher einiges mit Batch-Dateien automatisiert, mit der PS aber noch nie.
Wenn ich das richtig verstehe, schickst du mir eine Privatnachricht, wo kann ich diese abrufen?

Sorry für die nervige (Anfänger-) Frage.

Gruss, Raimo
colinardo
colinardo 14.10.2022 aktualisiert um 17:00:19 Uhr
Goto Top
Zitat von @RaimoK:
Ich bin schon etwas älter, habe früher einiges mit Batch-Dateien automatisiert, mit der PS aber noch nie.
Wenn ich das richtig verstehe, schickst du mir eine Privatnachricht, wo kann ich diese abrufen?
Korrekt die hast du bereits in deinem Postfach, diese fragst du hier ab (oder auf deinen Avatar klicken und dann > Nachrichten aus dem Menü auswählen)
Sorry für die nervige (Anfänger-) Frage.
Kein Thema dafür ist das Forum ja da face-smile.
jonagold
jonagold 27.02.2023 um 21:35:10 Uhr
Goto Top
Hallo Uwe,

die Dokumentation der Funktionsliste oben (bei Wifi) stimmt nicht mit den Funktionsnamen im Skript überein:
Hier auf der Seite: Get-FBWifiWPSInfo
Die Funktion heißt aber: Get-FBWPSInfo
(...)

Gruß
Hannes
jonagold
jonagold 27.02.2023 um 21:39:41 Uhr
Goto Top
Hallo Community,

ich würde mir wünschen, dass man einen Mesh Repeater ohne manuellen Knopfdruck remote beim Master anmelden kann z.B. mit Skript oder Klick.. .

Ich habe das schon mit der Set-FBWPSConfig versucht bzw. die TR064 Doku durchgesehen (...) aber keine Möglichkeit gefunden.

Vielleicht gibt es dazu Erkenntnisse.
Danke

Gruß
Hannes
colinardo
colinardo 28.02.2023 aktualisiert um 11:44:42 Uhr
Goto Top
Zitat von @jonagold:
die Dokumentation der Funktionsliste oben (bei Wifi) stimmt nicht mit den Funktionsnamen im Skript überein:
Hier auf der Seite: Get-FBWifiWPSInfo
Die Funktion heißt aber: Get-FBWPSInfo
Servus Hannes,
Herzlichen Dank für deine Meldung diesbezüglich. Habe die Funktionen in Version 1.1.7 im Modul nun in Get-FBWifiWPSInfo und Set-FBWifiWPSConfig umbenannt, da war die Doku im Forum aktueller als die Funktionsnamen face-wink.
ich würde mir wünschen, dass man einen Mesh Repeater ohne manuellen Knopfdruck remote beim Master anmelden kann z.B. mit Skript oder Klick.. .
Ich habe das schon mit der Set-FBWPSConfig versucht bzw. die TR064 Doku durchgesehen (...) aber keine Möglichkeit gefunden.
Über TR-064 selbst gibt es bei AVM diesbezüglich keine Möglichkeit. Wenn dann ließe sich das nur über die Lua-Skripte der Web-GUI realisieren, die sind aber wie bekannt anfällig für Änderungen bei Updates seitens AVM. Mangels Repeater kann ich das hier leider momentan nicht testen, sorry.

Grüße Uwe
jonagold
jonagold 28.02.2023 um 17:21:35 Uhr
Goto Top
Hallo Uwe,
danke für die Info. Ich habe nun bei dem Fritz!-Support angerufen, per Design gibt lt. Aussage keine andere Möglichkeit als auf die Buttons zu drücken. (Auf dem Webinterface auch nicht, somit wohl auch nicht bei Lua.)
Gruß Hannes
RomanG
RomanG 02.04.2023 um 11:12:28 Uhr
Goto Top
Hallo,

ich habe soeben dieses tolle Paket erworben. Ich würde gerne automatisiert die VDSL Werte auslesen lassen und mit Name und Datum versehen abspeichern. Nachdem ich seit Monaten von Verbindungsproblemen geplagt werde und dies meist in den Abendstunden auftritt, würde ich gerne den Telekom-Techniker die Werte präsentieren.

Die folgende Meldung erhalte ich leider. Gibt es hier schon einen Fix? Ich konnte leider nichts finden face-sad
Get-FBWANDSLSpectrumData
irm :
FRITZ!Box
FRITZ!Box
FRITZ!Box
Die angegebene URL wurde nicht gefunden. Sie werden auf die Startseite der FRITZ!Box weitergeleitet.
Falls Sie nicht automatisch auf die Startseite der FRITZ!Box weitergeleitet werden, klicken Sie hier.
window.setTimeout(function () {
window.location.href = "/";  
}, 10000);
In C:\FritzBoxTools\fritzbox_module\fritzbox_module.psm1:357 Zeichen:15
+ ...   $result = irm "http://$SCRIPT:FB_FQDN/internet/dsl_spectrum.lua?sid ...  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Vielen Dank im Voraus für die Mühe
colinardo
colinardo 02.04.2023, aktualisiert am 04.04.2023 um 10:54:00 Uhr
Goto Top
Servus @RomanG,
danke für deine Nachricht.
Das ist leider eine der wenigen Funktionen die über die LUA-Funktionen des WebGUI eingebunden werden musste weil es über TR-064 keine Möglichkeit gibt diese auszulesen. Da diese sich gerne nach Firmware Updates anders verhalten, hat sich vermutlich in Firmware 7.50 diesbezüglich die Funktion/URL/Parameter verändert. Da ich zur Zeit keine BOX an einem DSL-Anschluss zur Verfügung habe kann es etwas länger dauern bis ich das mit v. 7.50 debuggen kann.
Nachtrag: Funktion wurde mit Version 1.1.9 an FritzOS >=7.50 angepasst und liefert nun die Daten auch via TR-064 nicht mehr über LUA.

Grüße Uwe
ThomasFr
ThomasFr 13.04.2023 um 12:53:14 Uhr
Goto Top
Hallo colinardo,
erstmal danke für Deine super Sammlung.
Habe seit 2 Wochen Glasfaser und habe mir eine Fritz 5590 zugelegt.

Bin mal angefangen, mich mit den Möglichkeiten der Fritz-Box 5590 SW 7.30 auseinanderzusetzen und habe Deine Funktionen ausprobiert.

## http://fritz.box:49000/tr64desc.xml
##
## urn:dslforum-org:service:DeviceConfig:1
## http://fritz.box:49000/deviceconfigSCPD.xml
## urn:dslforum-org:service:Layer3Forwarding:1
## http://fritz.box:49000/layer3forwardingSCPD.xml
## urn:dslforum-org:service:LANConfigSecurity:1
## http://fritz.box:49000/lanconfigsecuritySCPD.xml
## urn:dslforum-org:service:ManagementServer:1
## http://fritz.box:49000/mgmsrvSCPD.xml
## urn:dslforum-org:service:Time:1
## http://fritz.box:49000/timeSCPD.xml
## urn:dslforum-org:service:UserInterface:1
## http://fritz.box:49000/userifSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Storage:1
## http://fritz.box:49000/x_storageSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_WebDAVClient:1
## http://fritz.box:49000/x_webdavSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_UPnP:1
## http://fritz.box:49000/x_upnpSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Speedtest:1
## http://fritz.box:49000/x_speedtestSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_RemoteAccess:1
## http://fritz.box:49000/x_remoteSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_MyFritz:1
## http://fritz.box:49000/x_myfritzSCPD.xml
## urn:dslforum-org:service:X_VoIP:1
## http://fritz.box:49000/x_voipSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_OnTel:1
## http://fritz.box:49000/x_contactSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Dect:1
## http://fritz.box:49000/x_dectSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_TAM:1
## http://fritz.box:49000/x_tamSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_AppSetup:1
## http://fritz.box:49000/x_appsetupSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Homeauto:1
## http://fritz.box:49000/x_homeautoSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Homeplug:1
## http://fritz.box:49000/x_homeplugSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Filelinks:1
## http://fritz.box:49000/x_filelinksSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_Auth:1
## http://fritz.box:49000/x_authSCPD.xml
## urn:dslforum-org:service:X_AVM-DE_HostFilter:1
## http://fritz.box:49000/x_hostfilterSCPD.xml
## urn:dslforum-org:service:WLANConfiguration:1
## http://fritz.box:49000/wlanconfigSCPD.xml
## urn:dslforum-org:service:WLANConfiguration:2
## http://fritz.box:49000/wlanconfigSCPD.xml
## urn:dslforum-org:service:WLANConfiguration:3
## http://fritz.box:49000/wlanconfigSCPD.xml
## urn:dslforum-org:service:Hosts:1
## http://fritz.box:49000/hostsSCPD.xml
## urn:dslforum-org:service:LANEthernetInterfaceConfig:1
## http://fritz.box:49000/ethifconfigSCPD.xml
## urn:dslforum-org:service:LANHostConfigManagement:1
## http://fritz.box:49000/lanhostconfigmgmSCPD.xml
## urn:dslforum-org:service:WANCommonInterfaceConfig:1
## http://fritz.box:49000/wancommonifconfigSCPD.xml
## urn:dslforum-org:service:WANDSLInterfaceConfig:1
## http://fritz.box:49000/wandslifconfigSCPD.xml
## urn:dslforum-org:service:WANDSLLinkConfig:1
## http://fritz.box:49000/wandsllinkconfigSCPD.xml
## urn:dslforum-org:service:WANEthernetLinkConfig:1
## http://fritz.box:49000/wanethlinkconfigSCPD.xml
## urn:dslforum-org:service:WANPPPConnection:1
## http://fritz.box:49000/wanpppconnSCPD.xml
## urn:dslforum-org:service:WANIPConnection:1
## http://fritz.box:49000/wanipconnSCPD.xml

Bei Get-FBWANDSLInterfaceConfig bekomme ich aber einen Fehler 820, der Service wird unterstützt, und habe mir das XML-File angesehen, es gibt die Action "GetInfo". Hast Du eine Idee, woher der Fehler 820 kommt?

Get-FBWANDSLInterfaceConfig
<?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>820</errorCode>
<errorDescription>Internal Error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
In D:\Daten\Software\fritz\Programmer-Doku\fritzbox_module\fritzbox_module.psm1:51 Zeichen:13

back-to-topthrow ([System.IO.StreamReader]($_.Exception.InnerExcepti ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 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>820</errorCode>
<errorDescription>Internal Error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
colinardo
colinardo 13.04.2023 aktualisiert um 13:38:09 Uhr
Goto Top
Servus @ThomasFr, willkommen auf unserer Platform.
Habe seit 2 Wochen Glasfaser und habe mir eine Fritz 5590 zugelegt.
Das kann ich dir sagen, Glasfaser ist kein DSL, wie der Funktionsname ja schon vermuten lässt (Get-FBWANDSLInterfaceConfig) ist diese nur für die DSL-Verbindungsart und nicht für Glasfaser geeignet 😉. Deswegen auch der interne Error 820 der Fritzbox, weil DSL inaktiv ist.
Für Infos zum WAN über Glasfaser nutze man stattdessen die
WANPPPConnection
Services.
https://avm.de/service/schnittstellen/

Grüße Uwe
ThomasFr
ThomasFr 13.04.2023 um 13:55:06 Uhr
Goto Top
Danke Dir, wieder was gelernt.
Dachte, das # http://fritz.box:49000/tr64desc.xml nur die Services anzeigt, die auch von dieser Fritz-Box unterstützt werden und da steht die Funktion drin, aber kann auch sein, dass ich die 5590 zusätzlich auch über DSL betreiben kann.

Werde mich mal an WANPPPConnection probieren.

Danke!
aqui
aqui 03.09.2023 um 15:52:31 Uhr
Goto Top
xmasmc
xmasmc 22.09.2023 um 07:31:54 Uhr
Goto Top
Problem
Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..
seit über einem Jahr lade ich automatisch täglich die Anrufliste von meiner Fritzbox.
Seit einiger Zeit geht das nicht mehr. Habe nichts geändert, soeben auch mit neuester Version deiner Module probiert, das selbe Problem:

Connect-Fritzbox -fqdn 'xxx.xxx.xxx.xxx' -username 'xxxxxxxxxx' -password 'xxxxxxxxxxx'
erzeugt folgende Fehlermeldung:

Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\fritzbox_module\fritzbox_module.psm1:53 char:13
+ throw $_.Exception.InnerException
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: ( : ) [], WebException
+ FullyQualifiedErrorId : Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..

Eine Idee wo das Problem liegt ?
colinardo
colinardo 22.09.2023 aktualisiert um 14:46:57 Uhr
Goto Top
Hallo erst einmal @xmasmc, so viel Zeit sollte sein!

Leider bringst du hier keinerlei Informationen zur Umgebung mit, die da wären bspw.

  • Betriebssystem / Patchlevel?
  • Welche Fritzbox mit welcher Firmware?
  • Genutzte Powershell Version?

Das aktuelle Modul läuft hier sonst einwandfrei mit den aktuellen Firmware-Versionen unter Windows 10 aufwärts. Bekomme sonst auch aktuell keine sonstigen negativen Rückmeldungen diesbezüglich.

Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..
Die Fehlermeldung lässt darauf schließen das dein System nicht mehr ganz frisch ist. Beispielsweise wird unter Windows 7 z.B. durch die fehlenden modernen SSL Cipher eine Verbindung nicht mehr supported weil die Fritzbox nur noch moderne SSL-Cipher für die Verbindung zulässt. Des weiteren wäre ein evt. abgelaufenes selbstsigniertes Zertifikat der Fritzbox eine Ursache.

Grüße Uwe
xmasmc
xmasmc 22.09.2023 um 15:30:13 Uhr
Goto Top
Hallo Uwe, sorry für meine Unfreundlichkeit, war etwas im Streß heute früh, trotzdem sollte Zeit früh Hallo oder so sein face-sad

Du hast leider recht, ich verwende Windows 7 prof. mit allen Updates.

Box 7590 A/CH im Bridgemodus auf Modem

Powershelll:
PSVersion 5.1.14409.1018
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14409.1018
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

Wie kann ich das Problem in Windows 7 lösen ?
Bin leider Netzwerkunkundig
Hat das damit zu tun ?
https://support.microsoft.com/de-de/topic/update-zum-aktivieren-von-tls- ...

Danke für die Hilfe
X-MAS
colinardo
colinardo 22.09.2023 aktualisiert um 16:31:41 Uhr
Goto Top
Du hast leider recht, ich verwende Windows 7 prof. mit allen Updates.
=> OS Upgrade! Windows 7 Schannel hat keine kompatiblen Cipher Suites mehr für den TLS1.2-Austausch mit der Fritzbox, die unsicheren Cipher hat AVM mit einem Update im Dezember 2022 entfernt.
Für veraltete OS gebe ich hier verständlicherweise keinen Support.
xmasmc
xmasmc 22.09.2023 um 17:16:10 Uhr
Goto Top
Hallo,
danke für die Antwort, aus bestimmten Gründen (Datenbank usw) ist ein Wechsel auf Win10 kein Thema für mich.
Muss bei Win7 bleiben, sollte jemand eine Lösung wissen, wäre schön
Danke und schönes Wochenende
colinardo
colinardo 22.09.2023 aktualisiert um 17:36:26 Uhr
Goto Top
Du kannst dafür jederzeit auch eine W10/11 VM zur Hand nehmen oder eine Linux-VM mit Powershell 7.
Sehe da auch keinen Grund deswegen weiterhin auf einem gelöcherten OS zu arbeiten, aber das muss jeder selbst wissen. Ich kenne so gut wie kaum eine W7 Anwendung die sich nicht mit minimalen Anpassungen auch unter Windows 10/11 betreiben lässt, aber egal ist das selbe Palaver wie damals mit XP, Überzeugung meist zwecklos face-smile.
xmasmc
xmasmc 28.09.2023 um 17:28:04 Uhr
Goto Top
Hallo, für alle die das selbe Problem wie ich habe, sprich kein Win10/11 verwenden können, empfehle ich FB_TOOLS, setzt auf php auf, funktioniert unter Win7 problemlos.
jonagold
jonagold 28.11.2023 um 17:27:31 Uhr
Goto Top
Hi,
habe bei mir das Skript erweitert, sodass Wake-On-LAN geht, so spare ich mir die "wol.exe" bei der aktivierung meines Mesh-Client-Ökosystems an einer FB7490 und kann mein Einschaltscript auch über vpn nutzen.

<#
.Synopsis
    Send WOL Packet to MAC Address of known host
.DESCRIPTION
    Use Fritzbox to send a WOL Paket. Working as well with mesh master to send to a host connected to a mesh client.
.EXAMPLE
    Set-FBWOLByMACAddress '12:34:56:78:9A:BC'  
#>
function Set-FBWOLByMACAddress {

    param(
        [parameter(mandatory=$true)][string]$MACAddress
    )

    if (!(CheckModuleInit)) {return}
    $resp = New-Request -urn "urn:dslforum-org:service:Hosts:1" -action 'X_AVM-DE_WakeOnLANByMACAddress' -parameter (@{'NewMACAddress' = $MACAddress})  
    return $resp.Envelope.Body.'X_AVM-DE_WakeOnLANByMACAddressResponse'  
}

Usage:
Remove-Module "fritzbox_module"  
Import-Module "$($mypath)\fritzbox_module\fritzbox_module"  
# Get-Module

#### ----------------- MAIN --------------------------

Write-Host "`nTurn on host using wol..."  
Write-Host "Path of the script : $mypath"  

Write-Host "`nWake on LAN on.."  
  Connect-Fritzbox -fqdn '192.168.9.1' -username 'user' -password 'pass!'  

  $pcmac="8C:DC:D4:25:D2:1C"  
  Set-FBWOLByMACAddress -MACAddress $pcmac

PS: Mein Abo ist nur noch bis Dezember.
colinardo
colinardo 28.11.2023 aktualisiert um 19:07:03 Uhr
Goto Top
Hallo @jonagold,
habe die Wake-On-LAN Funktion noch etwas überarbeitet, ein paar Checks hinzugefügt und mit Version 1.2.5 ins Modul als Invoke-FBWakeOnLan integriert. Danke für die Info 👍 . face-smile Schönen Abend.

Grüße Uwe
Armin1111
Armin1111 29.06.2024 um 13:47:53 Uhr
Goto Top
Hallo Uwe,
wollte "mal eben" ein Powershell-Skript schreiben um auf die FritzBox zuzugreifen. Bin erstmal gescheitert, dann auf dein Modul gestoßen und nun absolut begeistert. Grandiose Arbeit. Danke.
Problem ist nur, dass ich auch Funktionen brauche, die eine 2FA-Anmeldung erfordern und dass das zugehörige Skript automatisiert ablaufen soll. Da ist natürlich ein manuelles Drücken des Knopfes an der FritzBox keine Lösung face-wink
Du schreibst : "TOTP Authenticator Support über TR-064 ist zur Zeit von AVM leider noch nicht implementiert".
Weißt du, ob das geplant ist bzw. ob das kommen wird und wenn ja, wann?

Danke dir und viele Grüße
Armin
colinardo
colinardo 29.06.2024 aktualisiert um 14:21:31 Uhr
Goto Top
Servus Armin.
Freut mich für dich. 🙂
Du schreibst : "TOTP Authenticator Support über TR-064 ist zur Zeit von AVM leider noch nicht implementiert".
Weißt du, ob das geplant ist bzw. ob das kommen wird und wenn ja, wann?
Kann ich dir leider nicht sagen, wenn sich aber etwas dahingehend ändert, erfährst du das in diesem PDF unter dem Topic "Methods"
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_aut ...

Grüße Uwe
Armin1111
Armin1111 30.06.2024 um 11:54:02 Uhr
Goto Top
Alles klar. Danke für die schnelle Rückmeldung.
Dann warten wir mal ab face-smile

Viele Grüße
Armin
reenstix
reenstix 04.07.2024 um 21:09:34 Uhr
Goto Top
Hallo, das Modul funktioniert wie es sollte, aber ist der Befehl zur Anzeige aller Geräte im lokalen Netzwerk und welche IPv6 Adressen ihnen zugewiesen wurden?

LG
Marek
colinardo
colinardo 05.07.2024 aktualisiert um 11:03:36 Uhr
Goto Top
Servus Marek.
Zitat von @reenstix:
aber ist der Befehl zur Anzeige aller Geräte im lokalen Netzwerk und welche IPv6 Adressen ihnen zugewiesen wurden?
Die Fritzbox liefert über TR-064 nur die IPv4-Adressen zurück keine IPv6 IPs, zu erreichen über meine Funktion Get-FBHostList.

Die IPv6 Adressen liegen im Neighbor-Discovery Cache und müsste man stattdessen über die GUI abfragen mit allen Nachteilen die dies mit sich bringt:
Folgendes holt sich auch die IPv6 Adressen über die GUI Methoden:
$fboxurl = 'http://fritz.box'  
$username = 'USERNAME'  
$password = '******'  

# Helperfunctions
function md5([string]$string){
    [System.BitConverter]::ToString([System.Security.Cryptography.MD5]::Create().ComputeHash((new-object System.Text.UnicodeEncoding).GetBytes($string))).replace('-','').toLower()  
}

function Get-SessionID([string]$url,[string]$user,[string]$pass){
    $xml = irm -Uri "$url/login_sid.lua" -SessionVariable sess -ContentType "application/xml"  
    $sid = $xml.SessionInfo.SID 
    if ($sid -eq '0000000000000000'){  
        $challenge = $xml.SessionInfo.Challenge
        # Response berechnen
        $response = "$challenge-$((md5 "$challenge-$password").Substring(0,32))"  
        $xml = irm -Uri "$url/login_sid.lua" -WebSession $sess -Body @{response=$response;username=$username}  
        $sid = $xml.SessionInfo.SID
    }
    return $sid
}

function Get-PageData([string]$url,[string]$sid,[hashtable]$parameters = @{},$method = 'Get'){  
    $body = $parameters;$body.sid = $sid
    $r = Invoke-WebRequest -Uri $url -Body $body -Method $method
    return $r.Content
}

# Login durchführen / SID holen
$sid = Get-SessionID -url $fboxurl -user $username -pass $password
# get device data
$data = Get-PageData "$fboxurl/data.lua" -sid $sid -parameters @{page='netDev';xhrId='all';initial='';xhr="1";useajax='1'} -method Post | ConvertFrom-Json  

# get active devices
$active = foreach($device in $data.data.active){
    # get device details
    $devicedata = Get-PageData "$fboxurl/data.lua" -sid $sid -method Post -parameters @{page='edit_device';dev=$device.UID} | ConvertFrom-Json  
    [pscustomobject][ordered]@{
        DeviceName = $device.name
        DeviceMAC = $device.mac
        Type = $device.type
        Port = $device.port
        IPv6 = $devicedata.data.vars.dev.ipv6.iplist | select addrtype,ip,@{n='lastused';e={([datetime]'1970-01-01').AddSeconds($_.lastused)}} | sort lastused -Descending  
        IPv4 = $device.ipv4.ip
    }
}
$active | format-list *

screenshot

Grüße Uwe
reenstix
reenstix 09.07.2024 um 10:34:30 Uhr
Goto Top
Servus Uwe,

vielen Dank für das Skript, leider werden nach dem Ausführen nur die LAN-Geräte angezeigt. Ich würde gerne auch die WLAN-Geräte inklusive des Gastnetzes anzeigen.

LG
Marek
colinardo
colinardo 09.07.2024 aktualisiert um 11:20:56 Uhr
Goto Top
Zitat von @reenstix:
vielen Dank für das Skript, leider werden nach dem Ausführen nur die LAN-Geräte angezeigt. Ich würde gerne auch die WLAN-Geräte inklusive des Gastnetzes anzeigen.
Es werden nur aktive Clients angezeigt auch die aus dem WLAN, s. Screenshot. Die passiven (nicht eingeschalteten) Geräte listet die JSON nicht.

Das ist das Ergebnis von einer 7590 mit FW 7.57 andere Modell können sich unterscheiden, da kann ich wie gesagt keine Garantie drauf geben da AVM hier ein paar Unterschiede macht und es nicht über TR-064 sondern über die GUI Funktionen läuft. Ich werde hier keine weitere Arbeit hineinstecken da sich die GUI immer wieder ändert und keine langfristig stabilen Ergebnisse liefert.
Das musst du dann für dich selbst mit deiner verwendeten Box debuggen.

Viel Erfolg.
Grüße Uwe
colinardo
colinardo 09.07.2024 aktualisiert um 12:47:18 Uhr
Goto Top
Wenn dich speziell nur die WLAN Devices interessieren die bekommst du alternativ auch so
$fboxurl = 'http://fritz.box'    
$username = 'USERNAME'    
$password = '******'    

# Helperfunctions
function md5([string]$string){
    [System.BitConverter]::ToString([System.Security.Cryptography.MD5]::Create().ComputeHash((new-object System.Text.UnicodeEncoding).GetBytes($string))).replace('-','').toLower()    
}

function Get-SessionID([string]$url,[string]$user,[string]$pass){
    $xml = irm -Uri "$url/login_sid.lua" -SessionVariable sess -ContentType "application/xml"    
    $sid = $xml.SessionInfo.SID 
    if ($sid -eq '0000000000000000'){    
        $challenge = $xml.SessionInfo.Challenge
        # Response berechnen
        $response = "$challenge-$((md5 "$challenge-$password").Substring(0,32))"    
        $xml = irm -Uri "$url/login_sid.lua" -WebSession $sess -Body @{response=$response;username=$username}    
        $sid = $xml.SessionInfo.SID
    }
    return $sid
}

function Get-PageData([string]$url,[string]$sid,[hashtable]$parameters = @{},$method = 'Get'){    
    $body = $parameters;$body.sid = $sid
    $r = Invoke-WebRequest -Uri $url -Body $body -Method $method
    return $r.Content
}

# Login
$sid = Get-SessionID -url $fboxurl -user $username -pass $password
# get device data
$data = Get-PageData "$fboxurl/data.lua" -sid $sid -parameters @{page='wSet';xhrId='wlanDevices';initial='';xhr="1";useajax="1"} -method Post | ConvertFrom-JSON  
# get list of wifi devices
$wifidevices = foreach($device in $data.data.wlanSettings.knownWlanDevices){
    # get device details
    $devicedata = Get-PageData "$fboxurl/data.lua" -sid $sid -method Post -parameters @{page='edit_device';dev=$device.uid} | ConvertFrom-Json    
    [pscustomobject][ordered]@{
        DeviceName = $device.name
        DeviceMAC = $devicedata.data.vars.dev.mac
        Type = $devicedata.data.vars.dev.devType
        State = $devicedata.data.vars.dev.state
        IsGuest = $devicedata.data.vars.dev.isGuest
        IPv6 = $devicedata.data.vars.dev.ipv6.iplist | select addrtype,ip,@{n='lastused';e={([datetime]'1970-01-01').AddSeconds($_.lastused)}} | sort lastused -Descending    
        IPv4 = $devicedata.data.vars.dev.ipv4.current.ip
    }
}
$wifidevices | format-list *
reenstix
reenstix 16.07.2024 um 15:05:51 Uhr
Goto Top
Servus Uwe,

das zweite Skript listet tatsächlich alle Geräte im WLAN auf. Leider habe ich nicht gefunden, wonach ich suchte. Ist es möglich, die MAC-Adresse eines Geräts im Netzwerk anhand seiner IPv6-Adresse zu ermitteln, die vor 3 Monaten zugewiesen wurde. Ist diese Information überhaupt in der Fritzbox gespeichert? Meine Fritzbox ist 7590, FW 7.57

Danke dir und viele Grüße
Marek
colinardo
colinardo 16.07.2024 aktualisiert um 15:53:35 Uhr
Goto Top
Zitat von @reenstix:
Ist es möglich, die MAC-Adresse eines Geräts im Netzwerk anhand seiner IPv6-Adresse zu ermitteln, die vor 3 Monaten zugewiesen wurde. Ist diese Information überhaupt in der Fritzbox gespeichert? Meine Fritzbox ist 7590, FW 7.57
Nein soweit zurück geht das nicht. Das neighbor discovery nutzt valid und preferred lifetimes, die valid lifetimes sind meist zwischen 1 Woche und 30 Tage begrenzt wenn du Glück hast, außerdem verwenden die meisten Devices eh privacy Extensions.

Grüße Uwe
reenstix
reenstix 19.07.2024 um 11:24:08 Uhr
Goto Top
Das habe ich befürchtet, schließlich ist die Fritzbox nur ein Router und man erwartet nicht allzu viel. Vielen Dank für deine Antwort.

LG
Marek
aqui
aqui 19.07.2024 aktualisiert um 15:54:03 Uhr
Goto Top
nur ein Router und man erwartet nicht allzu viel.
Nur der Form halber... Dann hast du das aber falsch formuliert und ein "einfacher Consumer"router vergessen hinzuzufügen. Es gibt durchaus Premium Router die entsprechende APIs haben und all sowas supporten. Die Netzwerk Welt besteht ja glücklicherweise nicht nur aus Billo Plasteroutern. face-wink