BITS in Powershell funktioniert nicht?
Was mache ich falsch,hier das was ich in die batch datei geschrieben hab:
@echo off
echo blablabla
pause
Powershell -Executionpolicy Bypass -Command "Start-BitsTransfer -Source https://websitevonderdatei.com -Destination %userprofile%\Desktop"
start %userprofile%\Desktop\datei.blablabla
Wenn ich das starte,kommt ganze zeit nur "connecting" egal ob mit admin oder nich,woran kann das liegen?
1 Antwort
Wenn man sowohl Batch als auch Powershell richtig zu nutzen weißt, funktioniert sowohl der Download einer Webseite/Datei wie auch ihr Aufruf.
In Deinem Fall hast Du schon beim Ziel mehrere Probleme eingebaut.
- Dein Zielpfad kann Leerzeichen enthalten, wenn dein Username/-Profile Leerzeichen enthält (zB. Bei mir der Fall "C:\Users\Erzesel Secure") dann ist am Leerzeichen Schluss un man hat einen nicht vorhandenen Pfad. Hier helfen Quotes 'c:\Pfad mit Leerzeichen'
- Du gibst als Quelle eine Webadresse an, jedoch keine Quelldatei. Woher soll Bits wissen dass die Zieldatei datei.bla.. heisen soll. Folglich wird die Überschrift als Name der Datei übernommen und keine Extension vergeben, wenn bei der Quelle kein Dateiname definiert wurde. ergo wenn kein Dateiname in der Quelle, sollte dieser im Ziel definiert werden.
Beim Aufruf der heruntegeladenen Seite folgt das nächste Problem.
- Du verwendest die falsche Syntax für den Befehl START . Da Du wegen eventuelle Leerzeichen im Dateipfad wieder "Quotes" verwenden musst, muss für Start auch ein Fenstername angegeben werden. Dieser kann auch leer "" bleiben. also:
start "" "Pfad\aufzurufende Datei.ext"
- da du die Datei "datei.blablabla" nennst kann start nicht wissen wie die Dateiendung .blabla zu öffnen ist. (start ist das geschriebene Equivalent zum anklicken einer Datei). Du kannst also nur mit Dateiendungen arbeiten, welche dem System bekannt sind!
DownloadWebsite.cmd
@echo off
echo blablabla
Powershell "Start-BitsTransfer -Source 'https://www.gutefrage.net/frage/bits-in-powershell-funktioniert-nicht' -Destination '%userprofile%\Desktop\blahbla.html'"
start "" "%userprofile%\Desktop\blahbla.html"
pause
downloadFile.cmd
Powershell "Start-BitsTransfer -Source 'https://img1.dreamies.de/img/766/b/f2wn56r4me2.jpg' -Destination '%userprofile%\Desktop'"
start "" "%userprofile%\Desktop\f2wn56r4me2.jpg"
Im übrigen ist es nicht erforderlich bei einem Inlineaufruf einer Powershellzeile Policies zu definieren, dies ist nur für den Start von PS-Scriptdateien nötig.
PS:
Wenn ich das starte,kommt ganze zeit nur "connecting"
weshalb dein Server die verbindun nicht annimmt und wartet musst Du selber wissen. Vielleicht wartet er auf Nutzername/Passwort. das müsstest Du schon im Befehl übergeben, dafür gibts die Argumente -Authentication <String> und -Credential -Credential <PSCredential>.
Woher soll Dein server wissen, das Du die Seite nicht in eiem Browser abrufst, also die Abfrage von Username/Passwort nicht sehen kannst? Powershell hingegen "sieht" nur, der server hält irgendwie die Verbindung aufrecht, tut aber sonst nichts... "connecting"
Das ändert aber nichts an der falschen Syntax.
Das Dein Script ausfürbare Dateien downloaden und diese automatisch ausführen soll finde ich zugegebenermaßen bedenklich 🤔
Dieses blablabla war nur dafür gedacht um irgendeine Dateiendung darzustellen,klar hab ich .exe oder .bat genommen, allerdings habe ich hier blablabla genommen, trotzdem danke