Batch/Powershell (Datei von URL Herunterladen)

littleNicon

Cadet 1st Year
Registriert
Juli 2018
Beiträge
10
Hallo an die Communit,

Ich wollte mal anfragen, ob Ihr mir bei einer Script Aufgabe helfen könnt.
"...Bei der Aufgabe trete ich irgendwie auf der Stelle..."

Vorab: Ich bedanke mich schon im Voraus, für jede Hilfe oder unterstützenden Kommentar.

Thematik:
Ich habe in einem Projekt (Schule -> Automatisierung / Scripting) mit einem Batch & Powershell (mix) ein kleines Tool gebauen.
Die Batch Script's habe ich in den Funktionen aufgeteilt. Wenn man das erste Batch Script ausführt und eine Funktion ausführt, soll es das zusätzliche Stück Batch Script von einem öffentlichen Link herunterladen.

Zuerst dachte ich, dass es doch nicht schwierig sein kann, von einem öffentlichen link das .bat File herunterzuladen.
Doch daran beisse ich mir nun die Zähne aus.

Batch versuche -> [certutil], [wget] [BinStream]
Powershell versuche -> [$WebClient.DownloadFile], [Invoke-WebRequest], [Invoke-RestMethod], [Start-BitsTransfer]

Die Powershell Rückgabe:
Code:
Ausnahme beim Aufrufen von "DownloadFile" mit 2 Argument(en):  "Ausnahmefehler während einer WebClient-Anforderung."
In Zeile:7 Zeichen:1
+ $webClient.DownloadFile($source, $destination)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Was funktionierte, war der [Start-BitsTransfer] command mit Powershell.
Nur beim Testing auf einem Benutzer, der keine Administartoren rechte besitzt, kommt es an seine grenzen.
"...habe alles, was ich im Internet unter der suche gefunden habe, ausprobiert..."

Da es wohl an der URL liegt und ich mich mit HTML eher nur am Rande auskenne, habe ich mir den Link mal genauer angeschaut.
https://backupone.drive.filesync.ch/invitations/?share=6d134a94bfd91aab5588&dl=0 (File: blume.txt, Inhalt: asdasdasdasd)
"... den Link habe ich mal für das Forum gemacht. Und ja, man sieht den Namen 😅..."

Was ich verstanden habe, dass beim Klicken [Herunterladen] das Event ["class="btn ct-bg-primary ng-scope"] ausgelöst wird.
Sobald dieser mal angewählt wurde, ist im [iframe style="display:none"] das [src="/invitations/webdav/share/6d134a94bfd91aab5588/blume.txt?dl=true"] ersichtlich.

Wenn es kombiniert wird aus dem Hauptlink, kann die Vorschauseite und das Event umgangen werden.
"...Erkannt und gemacht..."

https://backupone.drive.filesync.ch/invitations/webdav/share/6d134a94bfd91aab5588/blume.txt?dl=true

Mit dem Link hapert es am meisten.
Ist der Browsercache leer, kommt er mit dem direkten Link nicht immer ans Ziel.
Code:
<obj><att id="rc"><val>1</val></att><att id="msg"><val>All requests to invitations scope must contain the invitation id</val></att></obj>

Ab hier war für mich die Verwirrung perfekt.
Da ab und zu der Download auftauchte und manchmal nicht, fragte ich mich wirklich, ob ich wirklich einen zuverlässiges Download Script hinbekomme oder nicht😬.

Hab es dann noch mit einem [$ie = New-Object -Com internetExplorer.Application] versucht.
"... Das macht die Sache aber sehr willkürlich bei der Ausführung..."

Ich will es euch nicht vorenthalten 🤣


Code:
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("https://backupone.drive.filesync.ch/invitations?share=61d13201c8ff0b08e427&dl=0")
$ie.visible = $true
while($ie.Busy){Sleep 2}
start-sleep -milliseconds 500
$IE.Document.getElementsByClassName('btn ct-bg-primary ng-scope').Click()
$IE.Document.querySelector('[class="btn ct-bg-primary ng-scope"]').Click()

$wsh = new-object -comobject wscript.shell
$id = (Get-Process iexplore* | Where-Object{$_.MainWindowTitle -match "Internet Explorer"}).id
if($wsh.AppActivate($id)){
    start-sleep -milliseconds 500
    $obj.SendKeys('{TAB}')
    start-sleep -milliseconds 500
    $obj.SendKeys('{TAB}')
    start-sleep -milliseconds 500
    $obj.SendKeys('{Enter}')
}

Der Downloadlink im Script führt zu einem simplen [Set-Windows_ExecutionPolicy.bat], das ich mal geschrieben habe.
Getestet und geschriben auf einem Windows 10.
"...Bei den .bat Dateien wird keine Vorschau angezeigt..."
"...Bei Windows 11 fliegt das Ding vollkommen auf die Schnauze.."


Frage:
  • Ist mein Vorhaben überhaupt umsetzbar?
  • Liegt die Problematik im Event von der Webseiten URL?
  • Sehe ich vor lauter Bäume den Wald nicht mehr? (habe ich was übersehen)
  • Kann ich eine weitere Script Sprache verwenden, um mein Vorhaben umzusetzen? (Wird wohl nicht nur bei Batch / Powershell belieben)
  • Habe ich an der falschen Stelle gegoogelt?

Über jeden Input würde ich mich mega freuen.

Vielen Dank.
Gruss Lukas ;-)

PS: Fals ich was vergessen habe zu erwähnen, schreib ich es gerne in die Kommentare.
 
Ich denke ein Problem ist der Downloadort, dass man da nochmal klicken muss.
Ich würde es dann per curl und FTP probieren.

curl "sftp://user:passwort@ftp.filesync.ch/blume.txt" -o C:\users\admin\desktop\blume.txt
Der User muss dann natürlich für den Ordner wo es heruntergeladen wird auch Schreibrechte besitzen.
 
Hallo @Suxxess,

Vielen Dank für deinen Input zu meinem Vorhaben.
Ja, auf das muss ich wohl oder übel wechseln, um das ganze zu vereinfachen und dass es auch simpel geht.

Mich hätte nur mega interessiert, warum die Befehlsausführung (z.b. PowerShell) dies bei einigen Links keine Schwierigkeiten hat und bei manchen super funktioniert.

Liegt dies in der HTML / Javascript (Webseiten) Programmierung?

PS: Hab es nun über einen S3 Cloudspeicher ausprobiert. Beim Download hat er mir dann wieder einen Fehler in der Ausgabe angezeigt.
Da beim S3 Browser angezeigt wird, dass man den Link mit TinyURL kürzen kann, hab ich es mal mit TinyLink versucht. Und siehe da, das funktioniert einwandfrei. (Und der Grund ist mir schleierhaft 🤨)
 
Zurück
Oben