okidoki
Goto Top

Batch to exe als offene Lösung nutzen "wollen"

Hallo zusammen,
DIESES Forum hat mir schon oft weiter geholfen und ich habe - für meine Verhältnisse - so viel gelernt, dass ich die letzte Zeit damit arbeiten konnte face-smile.

Nun komme ich aber doch leider nicht weiter und freue mich über Hilfe:
Sehr viele Beiträge drehen sich um die Frage und den Sinn von Bat-to-exe. Auch ich habe das in der Vergangenheit gemacht, aber mehr aus Verlegenheit, denn aus Schutzgründen!
Meine Gründe:
- es lassen sich in dieser exe weitere Dateien mit unterbringen, die eben in einer Datei gespeichert sind, eben exe
- da ich mir diese Datei zum Arbeiten online ziehe (ich sie also zwischendurch auch für Kollegen aktualisieren kann), ist EINE Datei herunterzuladen irgendwie einfach face-smile
- in meiner exe ist ein netter Ladebalken als Datei enthalten Batch-Progressbar, den ich schon seit Jahren nutze (weil ich den selbst einfach nicht hinbekomme, schluchz)

Zusammengenommen geht es mir also nicht um einen Schutz, sondern um Bequemlichkeit.
Bisher habe ich eine lokale Batch, die meine batch.exe herunterlädt:
taskkill /F /IM cscript.exe
@echo on & setlocal
:: Beginn Serverdaten
:: open server
:: Username
:: Passwort
set "s-sv=XXX"  
set "s-us=XXX"  
set "s-pw=XXX"  
set "s-pd=Verzeichnis"  
chcp 850
 >"%temp%\senden.txt" ECHO open %s-sv%  
>>"%temp%\senden.txt" ECHO %s-us%  
>>"%temp%\senden.txt" ECHO %s-pw%  
>>"%temp%\senden.txt" ECHO cd update  
>>"%temp%\senden.txt" ECHO binary  
>>"%temp%\senden.txt" ECHO get "batch.exe"  
>>"%temp%\senden.txt" ECHO QUIT  
FTP -v -i -s:%temp%\senden.txt
del "%temp%\senden.txt"  
batch.exe "%~n0"  
del batch.exe
exit

... dann wird diese unsichtbar gestartet und arbeitet ab, (weitere Dateien werden entpackt) währenddessen lasse ich die Progress-Bar laufen.
Alles funktioniert reibungslos!

Lässt sich das als Projekt realisieren? (Bestimmt, aber hier benötige ich Hilfe face-smile)

Insofern hatte dieser bat-to-exe "Kompiler" immer eine charmante Art, wenn nicht dauernd dieser Virus ...

Und ja, ich weiß, dass eine anständige Programmiersprache besser ist als mein Homework-Kram - allerdings läuft der seit Jahren sehr stabil und ich habe (stolz) alles allein zusammengebaut.

Ich habe mir auch schon den Wizzard von Windows angeschaut, allerdings möchte der eine Benutzereingabe beim Speichern und entpacken - ein Hinderungsgrund ...

Ich freue mich über Hilfe/Anregungen/Vorschläge ...
okidoki

Content-ID: 574426

Url: https://administrator.de/contentid/574426

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

NordicMike
NordicMike 25.05.2020 aktualisiert um 14:38:23 Uhr
Goto Top
Alles funktioniert reibungslos!
Lässt sich das als Projekt realisieren?

Gratulation, du hast dein Projekt mit einer funktionierenden Version begonnen.
Was willst du im Rahmen des Projektes noch weiter erreichen?
OKIDOKI
OKIDOKI 25.05.2020 um 14:58:13 Uhr
Goto Top
face-smile face-smile face-smile, nein, nein, nein - das habe ich eher über Jahre entwickelt ...

Meine Wünsche:
- eine eigene Progressbar (auch wenn die fertige sehr hübsch ist)
- alles zusammen in einer Datei (auch für verschiedene Systeme zum Entpacken), evtl. sogar als cab?
- batch ablaufend im Hintergrund
und was besonders wichtig wäre, das meine aufzurufende Batch (menu) nach dem Abarbeiten immer wieder im Vordergrund erscheint:
:starten
if exist 1.xlsx (set "ver= - - - OFFLINE - - -  ") else (set "ver=")  
if exist 1.xlsx (set "onl=3   Online schalten") else (set "onl=")  
if exist 1.xlsx (set "reinigen=4   Reinigung vorhandener Pläne") else (set "reinigen=")  
 >"%temp%\msgbox.vbs" ECHO WScript.Echo InputBox("" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "1  %ver%Aktuelle Woche" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "2  %ver%Kommende Woche" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "%onl%" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "%reinigen%" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "%prozess%" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO    "" ^& vbCrLf ^& _  
>>"%temp%\msgbox.vbs" ECHO "",  _  
>>"%temp%\msgbox.vbs" ECHO "Optionen")  
SET "all-a="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "all-a=%%i"  
DEL "%temp%\msgbox.vbs"  
if not defined all-a (goto :menu-exit) else (goto :menu-fin)
:menu-exit
taskkill /F /IM cscript.exe
del batch.exe Wbusy.exe
exit
:menu-fin
:: Überprüfung, ob Eingaben richtig sind, anonsten Ausstieg
if %all-a% LSS 1 goto :timeit
if %all-a%==1 goto :laufende
if %all-a%==2 goto :kommende
if %all-a%==3 goto :online
if %all-a%==4 goto :reinigung
if %all-a%==Optionen goto :mehr
if %all-a% GTR 3 goto :starten
...

möchte möglichst bei einem "update" wenig Aufwand beim Zusammenpackung und hochladen haben, daher bisher immer bat-to-exe ....
und mich natürlich weiter entwickeln face-smile

okidoki
GNULinux
Lösung GNULinux 25.05.2020 aktualisiert um 21:17:40 Uhr
Goto Top
Was du da zusammengeskriptet hast, ist die Grundfunktionalität eines jeden Updaters. Zusätzlich packt der das ganze noch um Bandbreite zu sparen sowie generiert eine Prüfsumme für die Integrität und und und. Ich verstehe den Sinn dieses Themas nicht: Klar kann man so was als Batchdatei schreiben. Aber wozu? Und vor allem warum in Batch?

Was hat das mit einer offenen Lösung zutun? Eine offene Lösung wäre eine entsprechende Bibliothek (die es dafür bestimmt schon gibt) zu nutzen. Wenn es um das Ergebnis geht ein guter Weg um Arbeit zu sparen. Will man zukunftsorientiert lernen (wonach es nicht so ganz aussieht), kann man das natürlich auch selbst programmieren.

Benutzernamen und Kennwörter als Klartext in generierte Skripte zu schreiben ist jetzt auch nicht gerade die sicherste Art, mit Zugangsdaten umzugehen. Genau so wenig wie das Herunterladen von Skripten, die ungeprüft ausgeführt werden. So was ist für einen potenziellen Angreifer doch der Jackpot: Alles was man da rein schreibt wird bedingungslos ausgeführt. Am besten ist noch, wenn das mit einem Admin-Account läuft.

Zitat von @OKIDOKI:
Und ja, ich weiß, dass eine anständige Programmiersprache besser ist als mein Homework-Kram - allerdings läuft der seit Jahren sehr stabil und ich habe (stolz) alles allein zusammengebaut.

Du weißt es besser, aber nutzt dennoch uralte Technik, bei dem sich vielen Entwicklern die Fußnädel aufrollen?
Und mit dem Argument können wir auch weiterhin Windows XP verwenden: Läuft seit Jahren stabil und da habe ich meine ersten Gehversuche alleine unternommen. Auf das was ich da in VBScript gemurkst habe bin ich aus heutiger Sicht nicht Stolz, sondern schäme mich eher dafür. Das taucht auch in keiner Bewerbung auf. Nicht nur weil die Technologie schon damals uralt war, sondern auch weil die Codequalität meiner damaligen Erfahrung entsprach.
OKIDOKI
OKIDOKI 25.05.2020 um 22:31:03 Uhr
Goto Top
Vielen Dank für die offenen Worte!

Die nächsten Tage werde ich darüber nachdenken, denn weitergekommen bin ich hier leider nicht.
Schämen tue ich mich ebenfalls, glaub man. Wie gesagt, ich bin nur mit diesem einen Projekt beschäftigt als alternder Freizeittüftler, ohne Ambitionen auf eine neue Karriere. Sprich, mein einziges Codeprojekt! Von daher verstehst du vielleicht, dass ich kein Studium für ein kleines Arbeitsprogramm starten werde! Ich freue mich zumindest, dass ich mir mit meinem kleinen Downloadtool schon sehr viel Arbeit erleichtert habe - und mit der Zeit mal kleine Verbesserungen einbaue. Aufgrund der Vielzahl an Forenbeiträge zum Thema bat-to-exe denke ich zwar, dass einige Leute daran Interesse haben - aus professioneller Sicht sicher ewig Gestrige.
Sei es drum, werde mich doch lieber Gartenarbeit und Motorradfahren widmen, als mich hier zu vielen Fragen auszusetzen - ohne konkrete Lösungen ... ist vermutlich wirklich der neueren Entwicklung geschuldet, die jeder geneigte Forenleser - außer mir - bieten kann. Schade um die kleinen Tools und Möglichkeiten, die in Windows immer noch schlummern - aber nach der dargestellten Meinung sicher aus Windows raus auf den großen Geschichtshaufen müssten. Schade eben, dass man darüber nichts mehr erfährt, obwohl ich hier schon einige Batch-Megaprofis kennenlernen durfte. Entweder Biber oder Bastla sagte einmal, dass Batch eigentlich alles kann, außer Kaffee kochen - und Programmierprofis beeindrucken - aber das ist ein anderer Thread!
monstermania
monstermania 26.05.2020 um 09:41:09 Uhr
Goto Top
Zitat von @OKIDOKI:
Schämen tue ich mich ebenfalls, glaub man. Wie gesagt, ich bin nur mit diesem einen Projekt beschäftigt als alternder Freizeittüftler, ohne Ambitionen auf eine neue Karriere. Sprich, mein einziges Codeprojekt!
Also schämen solltest Du Dich keinesfalls!
Ich bin als Administrator tätig und nutze immer wieder Batch, PowerShell und VBscript. Ich habe auch gar nicht den Anspruch, dass mein Code einen "echten" Programmierer beeindruckt! Der Code muss mein Problem lösen bzw. eine wiederkehrende Tätigkeit automatisieren. Thats It!
Natürlich lernt man im Laufe der Zeit dazu und wenn ich alten Code von mir ansehe, muss ich so manches Mal schmunzeln, wie ich damals so gecodet habe...

Sei es drum, werde mich doch lieber Gartenarbeit und Motorradfahren widmen, als mich hier zu vielen Fragen auszusetzen - ohne konkrete Lösungen ...
Ditto!
OKIDOKI
OKIDOKI 26.05.2020 um 10:43:37 Uhr
Goto Top
face-smile
Das finde ich sehr nett von dir!

Zur Vollständigkeit:
Vor 10 Jahren:
- Excel-Datei auf lokalem Rechner -> csv erzeugt -> hochgeladen -> automatisierte Tabelle hat Daten eingelesen // funktioniert
- Gedanken an Automatisierung -> per ftp -> dann per batch und ftp
- Wunsch eines klitzekleinen Menüs -> vbs Spript hinzugekommen
- irgendwann vbs Menu (alles per Batch): Menu -> Excel-Datei-Auswahl -> Download -> Excel bearbeiten, dann Daten aus Excel automatisiert ausgelesen -> per Batch csv erzeugt -> hochgeladen -> automatisierte Tabelle liest csv ein
- irgendwann kam eine Kollegin dazu, von daher war es notwendig nun von zwei Rechner zu agieren -> kleines Menu war hilfreich
- irgendwann kam Progressbar hinzu, da die Kollegin nicht wusste, wie lange ftp zum Download brauchte ...
- außerdem alle zusätzlichen Dateien in einer cab zusammengepackt
- dann alles in einer Datei # eben bat-to-exe #, funktionierte bisher weiter ohne Probleme!

Heute:
- nun wollte ich kleine Features einbauen. Da ich meine alte Download-Datei nicht mehr finden schaffe ich es nicht, einen kompletten Download zu starten. Geladen wird nur eine Datei: Tmp***.tmp Dann bricht das batch ab, die Tmp verschwindet und es wurde keine Datei geladen. Dieselbe Batch in einer (damaligen) exe funktioniert weiterhin ... daher meine Verzweifelung ...
- und was mich seither stört, dass meine vbs nicht immer wieder auf der obersten Stelle des Desktops liegt.

Und meine großen Herausforderungen:
- alles mit Boardmitteln!
- eigene Progressbar zu haben
- möglichst wenige Codezeilen

Falls mir doch jemand helfen möchte:
- Warum funktioniert folgende Batch nicht, sondern erzeugt beim Doppelklick nur die o.g. Tmp Datei und bricht dann ab?
Ein upload funktioniert übrigens mit derselben Datei tadellos!!! (also anstatt get -> put) verstehe ich einfach nicht ...
taskkill /F /IM cscript.exe
@echo on & setlocal
set "s-sv=Adresse"  
set "s-us=Username"  
set "s-pw=Passwort"  
 >"%temp%\senden.txt" ECHO open %s-sv%  
>>"%temp%\senden.txt" ECHO %s-us%  
>>"%temp%\senden.txt" ECHO %s-pw%  
>>"%temp%\senden.txt" ECHO cd update  
>>"%temp%\senden.txt" ECHO binary  
>>"%temp%\senden.txt" ECHO get "labor.exe"  
>>"%temp%\senden.txt" ECHO QUIT  
FTP -v -i -s:%temp%\senden.txt
del "%temp%\senden.txt"  
labor.exe "%~n0"  
del labor.exe
exit

... und vielleicht hat jemand noch einen Tipp, wie ich o.g. Menu etwas schöner hinbekomme ... oder wenigstens immer obenliegend auf dem Desktop habe face-smile

Vielen Dank für eure Hilfe
okidoki
NordicMike
NordicMike 26.05.2020 um 11:59:17 Uhr
Goto Top
- Warum funktioniert folgende Batch nicht, sondern erzeugt beim Doppelklick nur die o.g. Tmp Datei und bricht dann ab?
Wenn Du keinen Doppelklick machst, sondern es in einer Eingabeaufforderung (Umgangssprachlich: im DOS Fenster) startest, wirst du den Grund für den Abbruch erfahren. Beim Doppelklick schliesst sich alles viel zu schnell, bevor du den Grund lesen kannst.

Ein upload funktioniert übrigens mit derselben Datei tadellos!!! (also anstatt get -> put) verstehe ich einfach nicht ...
Das heisst sie existiert bereits auf dem lokalen Rechner (Sonst würde ja kein Upload gehen). Also kann kein Download passieren, da er dann überschreiben müsste.

... und vielleicht hat jemand noch einen Tipp, wie ich o.g. Menu etwas schöner hinbekomme
Mit Farben oder einer grafischen GUI evtl.

oder wenigstens immer obenliegend auf dem Desktop habe face-smile
ganz einfach: Link auf dem Desktop abspeichern
144260
144260 26.05.2020 aktualisiert um 12:23:46 Uhr
Goto Top
Und meine großen Herausforderungen:
- alles mit Boardmitteln!
Powershell
- eigene Progressbar zu haben
Powershell
- möglichst wenige Codezeilen
Powershell hat alles an Board was du brauchst, es kann auf das .NET Framework zurückgreifen und damit auch komplette GUIs erstellen inkl. nativem FTP-Upload und allem was dazugehört.
=> https://docs.microsoft.com/de-de/powershell/
OKIDOKI
OKIDOKI 26.05.2020 um 12:41:39 Uhr
Goto Top
Auf den ersten Blick habe ich das Gefühl, vor der Gartenarbeit mich doch noch einmal an den Rechner zu setzen ...
Sieht gut aus face-smile.

Also, werde mich mal versuchen einzufuchsen!
miniversum
miniversum 27.05.2020 um 12:03:46 Uhr
Goto Top
Zitat von @OKIDOKI:

Meine Wünsche:
- eine eigene Progressbar (auch wenn die fertige sehr hübsch ist)
Damit könntest du was bauen:
:loop
echo|set /p="."  
goto:loop
- alles zusammen in einer Datei (auch für verschiedene Systeme zum Entpacken), evtl. sogar als cab?
Sowas hab ich früher immer schon mit einem selbstentpackenden Archiv gemacht was ich mit der Vollversion von WinRAR erzeugt hatte. Da kansn tud dan enpacken udn gleich edie Batch starten.
OKIDOKI
OKIDOKI 27.05.2020 um 12:41:49 Uhr
Goto Top
Genau deswegen liebe ich Batch auch - sitze hier gerade an Powershell, fürchte aber bis ich auf meinem Stand bin dauert es noch seeeehr lange face-smile

Vielleicht gelingt es mir doch noch mit Batch: Mir fehlt eigentlich nur noch ein funktionierender Download ... den Rest würde ich, wie von dir vorgeschlagen - in ein Zip Archiv packen, wobei ich das inzwischen auch mit Batch und cab super im Griff habe.

Für den Ladebalken habe ich nach deinem Vorbild etwas weiter gebastelt. So wird deine Idee vielleicht noch etwas schöner. Einzig das DOS-Fenster im Hintergrund stört, das müsste irgendwie wech:

@echo off
:loop
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup("       |###                 ",1,"Datenübertragung, bitte warten ...", 64)    
%temp%\msg.vbs
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup("       |###|###             ",1,"Datenübertragung, bitte warten ...", 64)    
%temp%\msg.vbs
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup("       |###|###|###         ",1,"Datenübertragung, bitte warten ...", 64)    
%temp%\msg.vbs
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup("       |###|###|###|###     ",1,"Datenübertragung, bitte warten ...", 64)    
%temp%\msg.vbs
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup("       |###|###|###|###|###|",1,"Datenübertragung, bitte warten ...", 64)    
%temp%\msg.vbs
goto:loop
miniversum
miniversum 27.05.2020 um 13:35:15 Uhr
Goto Top
Hallo,

etwas schöner wär es dann so:
@echo off
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup(WScript.Arguments(0),1,"Datenübertragung, bitte warten ...", 64)  

:loop
%temp%\msg.vbs "       |###                 "   
%temp%\msg.vbs "       |###|###             "  
%temp%\msg.vbs "       |###|###|###         "   
%temp%\msg.vbs "       |###|###|###|###     "   
%temp%\msg.vbs "       |###|###|###|###|###|"  
goto:loop

Wenn die dne Aufruf der Batch dann so machst ist das Fester zumindest minimiert:
start "Balken" /MIN Balken.bat  

Wobei du ja auch die Balkenfunktion als Unterprozedur in der bestehenden Batch laufen lassen kannst...
OKIDOKI
OKIDOKI 27.05.2020 um 14:31:32 Uhr
Goto Top
Du bist der Beste face-smile
Habe gleich einen Hinweis, den der geneigte Leser vielleicht benötigt:
Subroutine

Jetzt fehlt mir nur noch eine funktionierende Download-Möglichkeit.
Hast du vielleicht eine Idee, wie dies mit vbs zu realisieren? (funktioniert vielleicht fehlerfreier ...) Dies ließe sich je ebenfalls gut in die Batch einbauen ...

So bekommt der Thread doch seinen Sinn face-smile
144260
144260 27.05.2020 aktualisiert um 14:58:23 Uhr
Goto Top
3 Zeilen in PS ... 1000 und ein Märchen in VBS
https://naterice.com/ftp-upload-and-ftp-download-with-vbscript/
OKIDOKI
OKIDOKI 27.05.2020 um 15:05:32 Uhr
Goto Top
dann werde ich mal aktiv face-smile

Danke dir!
miniversum
miniversum 27.05.2020 um 16:32:47 Uhr
Goto Top
Zitat von @144260:

3 Zeilen in PS ... 1000 und ein Märchen in VBS
https://naterice.com/ftp-upload-and-ftp-download-with-vbscript/
3 Zeilen in PS? So viel? face-wink
Hier ein Aufruf aus einer Batch der über PS die oui.txt Datei runterläd:
powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('http://standards-oui.ieee.org/oui/oui.txt','%~p0oui.txt')  
monstermania
monstermania 28.05.2020 um 08:15:16 Uhr
Goto Top
Zitat von @144260:
3 Zeilen in PS ... 1000 und ein Märchen in VBS
https://naterice.com/ftp-upload-and-ftp-download-with-vbscript/
So So,
in 3 Zeilen wird also auch das Abfangen evtl. Fehler abgehandelt!? face-wink
Der Code für den eigentlichen FTP-Transfer sind ja auch mit VBScript nur ein paar Zeilen. Der Rest geht dann für Fehlerbehandlungen/Prüfungen drauf. Deckt sich im Übrigen mit meinen Erfahrungen. Der eigentlich interessante Code sind oft nur ein paar Zeilen. Der Rest geht dann für Prüfungen das Abfangen der ganzen Sonderfälle bzw. Fehler drauf. Und das ist eigentlich in allen (Programmier)Sprachen die ich kenne so.

Grundsätzlich gebe ich Dir aber recht. PowerShell ist die Zukunft. Mit VBScript sollte man neue Projekte nach Möglichkeit jetzt nicht mehr anfangen.
OKIDOKI
OKIDOKI 28.05.2020 um 14:01:02 Uhr
Goto Top
... jetzt fehlen nur noch Passwort und Username ...
An welcher Stelle füge ich ein?

Danke dir - für einen Einzeiler ... face-smile
OKIDOKI
OKIDOKI 28.05.2020 um 14:12:07 Uhr
Goto Top
Ich gebe allen recht, die sagen, dass zukünftige Projekt in modernen Sprachen geschrieben werden sollen!
Nun muss ich trotzdem einfach noch einmal sagen, dass es nur um ein kleines Projekt geht, was eigentlich bisher gut lief.

Verflixt und zugenäht war es nur, dass die Batch-Datei zum Download alleinstehend nicht funktioniert, und gerade ausprobiert, mit bat-to-exe gewrappt ihren Dienst ohne Murren verrichtet!

Da mein kleines Skript-Projekt täglich genutzt wird (von meiner Kollegin), muss es zunächst in aktueller Version weiterlaufen ...

Daher werde ich:
- meinen eigenen Ladebalken (wie von miniversum vorgeschlagen) als Subroutine einbauen
- die Download-Hauptdatei als Cab verpacken und
- die Downloadroutine weiterhin mit bat-to-exe erstellen
... so geht es zumindest erst einmal für die tägliche Arbeit!

Für PowerShell habe ich mir schon einige Tut's angeschaut - bis ich auf meinem jetzigen (Batch-) Stand bin wird es aber dauern ...
144260
Lösung 144260 28.05.2020 aktualisiert um 15:16:04 Uhr
Goto Top
Zitat von @OKIDOKI:

... jetzt fehlen nur noch Passwort und Username ...
An welcher Stelle füge ich ein?
In die URI
"ftp://username:password@ftp.domain.tld"  
Bzw. neuere Systeme supporten die Credentials nicht mehr in der URI (denn hinter dem WebClient steht die IE Engine), dann dem WebClient die Credentials übergeben
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui.txt','%~p0oui.txt')"

Ich hätte das halt über die nativen FTP Funktionen im .NET gemacht (System.Net.FtpWebRequest), der WebClient ist mir zu sehr IE lastig programmiert und popt gerne mal IE Dialogboxen außerhalb der PS auf, die eine Automatisierung verderben können.

Tante Edith:
PowerShell + FTP in EXE
Lösung mit FTPWebRequest als bessere Alternative zum WebClient findet sich dort von @colinardo am 06.03.2016
OKIDOKI
OKIDOKI 28.05.2020 um 16:18:38 Uhr
Goto Top
Herzlichen Dank, dann ist Pfingsten am Rechner gesichert face-smile

Der Link ist ein klasse Hinweis!
Wenn das Problem (bei dem link mit den Kollegen am Schreibtisch) weiterhin besteht, ist es ja auch fraglich, ob man seinen Web-Ordner in den Explorer einbinden sollte ...
Aber man sieht an deinem Link (Beispiel), dass auch andere Leute genau dasselbe Problem haben - und dank euch - einfach Lösungen bekommen!!!

LIEBEN Dank!
OKIDOKI
OKIDOKI 02.06.2020 um 08:30:05 Uhr
Goto Top
... so Leute, Pfingsten ist auch schon wieder um face-smile

In Ruhe habe ich mich jetzt mit killpids Lösung befassen können:
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui.txt','%~p0oui.txt')"  

geht wundervoll!!!

An welcher Schraube muss ich nun drehen, damit er die Datei nun wieder hochlädt?
144260
Lösung 144260 02.06.2020 aktualisiert um 08:57:52 Uhr
Goto Top
Genau gleich nur eben die Uploadfile statt DownloadFile Methode dafür nutzen
https://docs.microsoft.com/de-de/dotnet/api/system.net.webclient.uploadf ...
Wieder mal RTFM, aber das wäre ja bei Administrator.de zu viel verlangt ...
OKIDOKI
OKIDOKI 02.06.2020 um 09:26:21 Uhr
Goto Top
Irgendwie habe ich, glaube ich, zu naiv gedacht:
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.UploadFile(''oui.txt,'http://standards-oui.ieee.org/oui/oui.txt')"  

dann kommt:
Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en):  "Ausnahmefehler während einer WebClient-Anforderung."  
In Zeile:1 Zeichen:136
+ ... A5KaoyQTpY';$client.uploadFile('oui.txt','http://standards-oui.ieee.org/oui/oui.txt')  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : WebException

... und gleich noch ein Anschlussproblem, da ich während des Ladens den super Ladebalken von miniversum habe, aber trotz der Sub ihn nicht mehr stoppen kann ...
Vermutlich liegt das daran, dass der Ladebalken ja immer wieder goto :loop aufruft und nicht zum Ende kommt:

 @echo off
 
 :main
@echo here main
call :sub1
call :sub2
del %temp%\msg.vbs
goto :end
 
:sub1
@echo off
 >%temp%\msg.vbs ECHO Set WshShell = CreateObject("WScript.Shell")  
>>%temp%\msg.vbs ECHO intResult = WshShell.Popup(WScript.Arguments(0),1,"Datenübertragung, bitte warten ...", 64)  

:loop
%temp%\msg.vbs "       |###                 "   
%temp%\msg.vbs "       |###|###             "  
%temp%\msg.vbs "       |###|###|###         "   
%temp%\msg.vbs "       |###|###|###|###     "   
%temp%\msg.vbs "       |###|###|###|###|###|"  
goto:loop

:sub2
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui.txt','%~p0oui.txt')"  
goto :eof

:end

Wie beende ich also den Ladebalken? Puh ... face-smile
144260
Lösung 144260 02.06.2020 aktualisiert um 09:50:19 Uhr
Goto Top
Irgendwie habe ich, glaube ich, zu naiv gedacht:
nee du hast den Link oben nicht mal ansatzweise gelesen, denn dann hättest du die URL als ersten und nicht als zweiten Parameter angegeben, außerdem fehlt dann noch der absolute Pfad zur Datei...Das zum Thema Brett vorm Kopp.
OKIDOKI
OKIDOKI 02.06.2020 um 10:04:33 Uhr
Goto Top
Bretter, Bretter, Bretter ... face-smile
Holz, Bäume, Sehen ...

Also, noch einmal gelesen und sogar verstanden - und - läuft !!!

Ich danke dir vielmals, hier im Homeoffice mit wuselnden Kindern um einen herum doch noch zu einer Lösung gelangen zu können!
OKIDOKI
OKIDOKI 02.06.2020 um 21:05:31 Uhr
Goto Top
Nachtrag: Ich hatte ja Probleme, den Ladebalken als Subroutine einzubauen.
Nun lasse ich einfach ein Popup-Fenster aufgehen und automatisch wieder schließen mit einem Hinweis -
für die Leute, die das nachbauen wollen:
start mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Download, bitte warten ...             ', 3, 'Titel', 64 );close()"  

Mit der 64 lassen sich die Icons wunderbar wechseln, die 3 bestimmt gerade 3 sec.

Noch einmal herzlichen Dank an alle!!!
144260
Lösung 144260 02.06.2020 aktualisiert um 22:03:05 Uhr
Goto Top
Zitat von @OKIDOKI:

Nachtrag: Ich hatte ja Probleme, den Ladebalken als Subroutine einzubauen.
Nun lasse ich einfach ein Popup-Fenster aufgehen und automatisch wieder schließen mit einem Hinweis -

Dann schau dir doch mal an wie man sowas besser angeht, bsp einer Progressbar mit den ganzen schönen GUI Elementen die dem NET Framework zur Verfügung stehen:
Powershell GUI bleibt während einer While schleife hängen...
OKIDOKI
OKIDOKI 02.06.2020 um 23:25:06 Uhr
Goto Top
Das sieht nach ganz großem Kino aus ... kann ich mich nur verbeugen vor ...
Allerdings frage ich mich, ob es in diesem Fall nicht auch eine Nummer kleiner geht. Für mein eigenes Backup, ebenfalls mit Robocopy, nutze ich einen Einzeiler, der unbemerkt im Scheduler alle 30 min. durchläuft.
Ab grundsätzlich hast du natürlich recht, dass eine Verschönerung statt des Popup angebracht ist face-smile
- und natürlich in diesem Forum entstanden ist ...
OKIDOKI
OKIDOKI 03.06.2020 um 08:10:02 Uhr
Goto Top
an killpid habe ich noch die Frage, ob sich mit einem String auch mehrere Dateien auf einmal hochladen lassen? Soweit ich das in der Doku verstanden habe muss ich für jede Datei den kompletten String nutzen:
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui1.txt','%~p0oui1.txt')"  
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui2.txt','%~p0oui2.txt')"  
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui3.txt','%~p0oui3.txt')"  
usw., oder lassen sich mehrere Dateien (z.B. mit einem Komma) verbinden?
144260
Lösung 144260 03.06.2020 um 10:24:02 Uhr
Goto Top
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential 'username','Password';$client.DownloadFile('http://standards-oui.ieee.org/oui/oui1.txt','%~p0oui1.txt');$client.DownloadFile('http://standards-oui.ieee.org/oui/oui2.txt','%~p0oui2.txt');$client.DownloadFile('http://standards-oui.ieee.org/oui/oui3.txt','%~p0oui3.txt')"  
OKIDOKI
OKIDOKI 04.06.2020 um 07:59:29 Uhr
Goto Top
... die Welt ist ein Semikolon face-smile!

Ich danke dir vielmals!!!
OKIDOKI
OKIDOKI 21.10.2020 aktualisiert um 20:03:26 Uhr
Goto Top
Leider läuft die Batch nicht mehr, es kommt die Meldung:
Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en):  "Die zugrunde liegende Verbindung wurde geschlossen: Der  
Server hat eine Protokollverletzung ausgeführt.."  
In Zeile:1 Zeichen:136
+ ... XXX';$client.uploadFile('ftp://xxx@xxx.server.com ...  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : WebException

Habt ihr eine Idee?
Danke .... face-smile
Okidoki