[Info] Wie verwende ich denn nun die Skript-Dateien aus YourFritz/eva_tools?

Der Fehler kommt ggf. von einem zu frühen Timeout, während die Datenübertragung noch läuft.

Das Skript sieht dann einen Fehler und versucht, ein paar Einstellungen wieder auf die alten Werte zu setzen, damit sich nicht mit jedem weiteren Versuch der verfügbare Speicher weiter verringert.

Du kannst ja mal die Timings ermitteln (am besten mit Wireshark und dem passenden Filter, damit Du das Ergebnis ohne Probleme auch hier einstellen kannst) und wenn sich meine Vermutung bewahrheitet, baue ich noch einen passenden Parameter ein. Bei PLC und WLAN kann die effektive Übertragungsrate schon mal sehr gering sein - dann dauert auch die Übertragung von 25 bis 30 MB mal etwas länger, wie es jeder von langsamen Downloads aus dem Netz kennt.
 
An welcher Stelle in der EVA-FTP-Client.ps1 müsste ich den Timeout hoch setzen?
 
Hier: https://github.com/PeterPawn/YourFr...60b19387370/eva_tools/EVA-FTP-Client.ps1#L407 wird nach dem Ende der Datenübertragung und dem Schließen von Stream, Datei und Socket noch für fünf Sekunden gewartet, damit die Box Zeit hat, mit einer passenden Meldung (226 oder 553) zu reagieren ... aber die Schleife wird auch hier schon abgebrochen ($sending = false).

Die Box reagiert halt auf einen Upload eines Images, das sie dann starten kann (ansonsten kommt 553), nur noch mit dem Schließen der (Control-)Connection des FTP-Servers und NICHT mit einer weiteren Meldung, die man dann auswerten könnte - der Verbindungsabbruch an sich ist auch schon das einzige Anzeichen, welches man für den "Erfolg" auswerten könnte. Irgendwelche anderen Meldungen gibt es nur bei Mißerfolgen.

Offenbar kommt es in der Zwischenzeit bei Dir aber noch zu anderen, unerwarteten Problemen, die dann in diesen catch-Block (https://github.com/PeterPawn/YourFr...60b19387370/eva_tools/EVA-FTP-Client.ps1#L424) laufen und dort wieder den Rückgabewert ($result) auf False ändern - womit das BootDeviceFromImage dann seinerseits in die Fehlerbehandlung für nicht erfolgreiches WriteFile läuft (https://github.com/PeterPawn/YourFr...60b19387370/eva_tools/EVA-FTP-Client.ps1#L310) und versucht, die Speichereinstellung wieder auf ihre Ausgangswerte zu setzen.

Das ist also nicht mit einer so simplen Änderung getan ... dazu muß man entweder ermitteln, welche Exceptions denn tatsächlich im WriteFile auftauchen und die ggf. genauer untersuchen, damit man entscheiden kann, ob man vielleicht auf das Setzen von $result verzichten kann in dem catch-Block. Aber ich zäume solche Pferde nur ungern von hinten auf ... deshalb habe ich auch nach einem Netzwerk-Mitschnitt gefragt, weil man in diesem anhand der Zeitstempel der Pakete erst mal beginnen kann, sich das Timing der verschiedenen Aktionen zu vergegenwärtigen.

Stellt sich dann heraus, daß der Mitschnitt eigentlich gut aussieht und keine offensichtlichen Anzeichen für Probleme enthält, kann/muß man sich die Exceptions in dem catch-Block in WriteFile eben genauer ansehen - die werden im Moment ja gar nicht ausgewertet, weil sie im "normalen Ablauf" selten bis nie auftreten und jede Exception daher als "Fehler" angesehen wird.

Und wie schon angedeutet ... ich hatte nicht geschrieben, daß Du einfach nur einen Timeout-Wert irgendwo im Skript "hochsetzen" müßtest - ich wollte zum Ausdruck bringen, daß ich mich dann mit einem zusätzlichen "passenden" Parameter (wenn der überhaupt notwendig sein sollte) anfreunden könnte und den einbauen würde. Davon, daß dieser Parameter dann irgendeinen Timeout-Wert erhöhen oder verringern würde, steht bei mir gar nichts, wenn Du #121 noch einmal liest. Leider sind auch nicht alle genutzten .NET-Interfaces dann "native" in PowerShell - daher endet eine Kette von Exceptions auch schon mal in irgendwelchem Glue-Code (zwischen .NET und PS) und gibt nicht immer ausreichend Aufschluß (in "Textform") über den tatsächlichen Fehler.

EDIT: Wobei ich mich hinsichtlich der Meldungen geirrt habe ... auch beim Upload in den Speicher kommt noch ein 226 Transfer completed - da wäre es tatsächlich denkbar, daß das fünfsekündige Warten, bevor dann versucht wird, diese Nachricht im Control-Channel zu lesen, zu kurz ist und daher $result nicht auf True gesetzt wird (was bei 226 ja erfolgen würde).
 
Zuletzt bearbeitet:
Ich habe (schon vor einigen Tagen) ein paar Änderungen an EVA-Discover.ps1 vorgenommen: https://github.com/PeterPawn/YourFritz/commit/cae5d5bcdabf4b6787ee8280a51ac8d67bab42eb

Diese sollen in erster Linie dazu dienen, künftig keine Ausnahmen in der Windows-Firewall mehr erforderlich zu machen - es wird zuerst mit einem Unicast-Paket an die gewünschte FRITZ!Box-IP gearbeitet, das in den meisten Fällen ausreichen sollte, um für die später von der FRITZ!Box gesendeten Antworten ein passendes "Loch" (temporär) in die Firewall zu schlagen. Da der Rest ja mit Broadcast-Paketen arbeitet bei der Suche nach der Box, ist damit eine solche Zuordnung für eingehende Pakete nicht möglich.

Nur wer eher exotische Anwendungsfälle für dieses Skript nutzen sollte (bei denen die gewünschte IP der FRITZ!Box nicht bekannt ist), der muß sich immer noch selbst um die notwendigen Freigaben in der Firewall kümmern oder sogar noch besser alle alten Freigaben für den PS-Host entfernen, bevor er die Skript-Dateien aufruft. Dann sollte das OS auch wieder automatisch nach notwendigen Firewall-Exceptions fragen - die muß man dann natürlich auch korrekt beantworten (das Skript versucht mit einem Hinweis dabei zu unterstützen) und ggf. sogar das Skript noch einmal starten, falls man bei den anderen Aktionen nicht schnell genug war und die FRITZ!Box schon den Start des installierten Systems fortgesetzt haben sollte.
 
Zuletzt bearbeitet:
Ich schließe mich dem Dank an. Es hat alles super funktioniert :)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.