SFTP Script (psftp.exe) Windows2003 Std.Server 64-Bit SFTP läuft manuell, jedoch nicht als Scheduled Task
Windows 2003 Std. Server 64-Bit Englisch
Intel Xeon X5450 3.00 GHz
4 GB RAM
Hallo zusammen,
gerne möchte ich automatisiert, Daten von einem SFTP Server abholen. Hierzu habe ich ein Script geschrieben, welches wie folgt aussieht. Das Script besteht aus 3 Teilen, in dem ersten Teil, wird das Logfile definiert, sowie das cmd file aufgerufen, welches sich auf den SFT Server verbindet. In diesem File, wird mittels dem Programm psftp.exe und diversen Paramatern (Siehe unten) die Verbindung zum SFTP Aufgebaut, sowie die Datei abgeholt. Im Anschluß, wird die Datei an einen entsprechenden Ort kopiert, sowie aus Sicherheitsgründen eine Dateihistorie erstellt. Im Abspann werden noch diverse Abfragen durchgeführt, welche ins Logbuch geschrieben werden.
Nun folgendes Problem. Das Script funktioniert wunderbar, allerdings nur, so lange ich es manuell aufrufe. Erstelle ich einen Scheduled Task, mit den entsprechenden Benutzerinformationen läuft es nicht mehr. Als Fehlercode, wird der Standardcode 0x1 (also nicht erfolgreich) ausgegeben.
Besteht ein Problem, wenn ein Batchfile, ein anderes File aufruft??
Für Euere Hilfe wäre ich sehr Dankbar..
Anbei der Sourcecode der entsprechenden Files:
File 1: (personal.cmd)
SET LOGFILE=h:\scripts\Personalstamm\personal.log
echo "Masterdate transfer starting" >> %LOGFILE%
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%
call ConnecttoSFTPServer.cmd
File 2 (ConnecttoSFTPServer.cmd)
SET LOGFILE=h:\scripts\Personalstamm\personal1.log
psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT >> %LOGFILE% --> Hier werden die SFTP Commands aufgerufen
if not exist %filetodownload% goto fehler
copy h:\scripts\Personalstamm\%filetodownload% "H:\%mesname%\lohn_exp\" >> %LOGFILE%
del h:\scripts\Personalstamm\%filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.7 %filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.6 %filetodownload%.7
ren h:\scripts\Personalstamm\%filetodownload%.5 %filetodownload%.6
ren h:\scripts\Personalstamm\%filetodownload%.4 %filetodownload%.5
ren h:\scripts\Personalstamm\%filetodownload%.3 %filetodownload%.4
ren h:\scripts\Personalstamm\%filetodownload%.2 %filetodownload%.3
ren h:\scripts\Personalstamm\%filetodownload%.1 %filetodownload%.2
ren h:\scripts\Personalstamm\%filetodownload% %filetodownload%.1
echo "Job finished successfully" >> %LOGFILE%
goto ende
:fehler
echo "Job failed" >> %LOGFILE%
:ende
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%
echo "---------------------------" >> %LOGFILE%
File 3 (SFTPCommands.DAT)
cd out
get pers_aps.dat
bye
Intel Xeon X5450 3.00 GHz
4 GB RAM
Hallo zusammen,
gerne möchte ich automatisiert, Daten von einem SFTP Server abholen. Hierzu habe ich ein Script geschrieben, welches wie folgt aussieht. Das Script besteht aus 3 Teilen, in dem ersten Teil, wird das Logfile definiert, sowie das cmd file aufgerufen, welches sich auf den SFT Server verbindet. In diesem File, wird mittels dem Programm psftp.exe und diversen Paramatern (Siehe unten) die Verbindung zum SFTP Aufgebaut, sowie die Datei abgeholt. Im Anschluß, wird die Datei an einen entsprechenden Ort kopiert, sowie aus Sicherheitsgründen eine Dateihistorie erstellt. Im Abspann werden noch diverse Abfragen durchgeführt, welche ins Logbuch geschrieben werden.
Nun folgendes Problem. Das Script funktioniert wunderbar, allerdings nur, so lange ich es manuell aufrufe. Erstelle ich einen Scheduled Task, mit den entsprechenden Benutzerinformationen läuft es nicht mehr. Als Fehlercode, wird der Standardcode 0x1 (also nicht erfolgreich) ausgegeben.
Besteht ein Problem, wenn ein Batchfile, ein anderes File aufruft??
Für Euere Hilfe wäre ich sehr Dankbar..
Anbei der Sourcecode der entsprechenden Files:
File 1: (personal.cmd)
SET LOGFILE=h:\scripts\Personalstamm\personal.log
echo "Masterdate transfer starting" >> %LOGFILE%
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%
call ConnecttoSFTPServer.cmd
File 2 (ConnecttoSFTPServer.cmd)
SET LOGFILE=h:\scripts\Personalstamm\personal1.log
psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT >> %LOGFILE% --> Hier werden die SFTP Commands aufgerufen
if not exist %filetodownload% goto fehler
copy h:\scripts\Personalstamm\%filetodownload% "H:\%mesname%\lohn_exp\" >> %LOGFILE%
del h:\scripts\Personalstamm\%filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.7 %filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.6 %filetodownload%.7
ren h:\scripts\Personalstamm\%filetodownload%.5 %filetodownload%.6
ren h:\scripts\Personalstamm\%filetodownload%.4 %filetodownload%.5
ren h:\scripts\Personalstamm\%filetodownload%.3 %filetodownload%.4
ren h:\scripts\Personalstamm\%filetodownload%.2 %filetodownload%.3
ren h:\scripts\Personalstamm\%filetodownload%.1 %filetodownload%.2
ren h:\scripts\Personalstamm\%filetodownload% %filetodownload%.1
echo "Job finished successfully" >> %LOGFILE%
goto ende
:fehler
echo "Job failed" >> %LOGFILE%
:ende
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%
echo "---------------------------" >> %LOGFILE%
File 3 (SFTPCommands.DAT)
cd out
get pers_aps.dat
bye
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 154786
Url: https://administrator.de/forum/sftp-script-psftp-exe-windows2003-std-server-64-bit-sftp-laeuft-manuell-jedoch-nicht-als-scheduled-task-154786.html
Ausgedruckt am: 19.01.2025 um 03:01 Uhr
19 Kommentare
Neuester Kommentar
Moin,
da hast du aber einige Daten verschleiert/parametrisiert die die Ursache sein könnten.
Wobei ich dir mal glauben will, dass es manuell wirklich läuft - das fehlende Leerzeichen nach % und -pw sieht kosmisch aus
Die plausibelste Lösung wäre du werkelst im Task nicht in dem Ordner, wo die gecallten Scripte liegen.
Gruß
da hast du aber einige Daten verschleiert/parametrisiert die die Ursache sein könnten.
Wobei ich dir mal glauben will, dass es manuell wirklich läuft - das fehlende Leerzeichen nach % und -pw sieht kosmisch aus
psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT >> %LOGFILE%
- kennt der Scriptuser Laufwerk Heinrich
if exist h:\scripts\Personalstamm\personal.log echo Heinrich kenn ich
pause
pause
- was steht im Logfile?
Die plausibelste Lösung wäre du werkelst im Task nicht in dem Ordner, wo die gecallten Scripte liegen.
Gruß
moin,
nicht falsch verstehen, aber wie das manuell aussieht ist mir und dir ja "latte"...
Wie das aussieht, wenn der Task es laufen läßt, das ist der interessante Punkt.
Gruß
nicht falsch verstehen, aber wie das manuell aussieht ist mir und dir ja "latte"...
Wie das aussieht, wenn der Task es laufen läßt, das ist der interessante Punkt.
Gruß
ist sftp nicht ftp über ssh oder so ähnlich?
deshalb würde ich einfach das passwort über schlüssel austauschen lasse.
so das es für den benutzer nicht mehr angegeben werden muss.
schau dir das
http://blog.murawski.ch/2010/04/ssh-authentifizierung-mit-privatekey/
und das
http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/doc ...
an....
prüfe mal ob es ein linux ist....
so ist euer script auch sicherer, das passwort ist nicht im klartext.
kannst ja auch mal schauen ob ihr, (bestimmt) wenn es ein linux server ist nicht mit scp löst.
gruß michael
deshalb würde ich einfach das passwort über schlüssel austauschen lasse.
so das es für den benutzer nicht mehr angegeben werden muss.
schau dir das
http://blog.murawski.ch/2010/04/ssh-authentifizierung-mit-privatekey/
und das
http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/doc ...
an....
prüfe mal ob es ein linux ist....
so ist euer script auch sicherer, das passwort ist nicht im klartext.
kannst ja auch mal schauen ob ihr, (bestimmt) wenn es ein linux server ist nicht mit scp löst.
gruß michael
Moin,
So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint
Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.
Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....
Moin,
So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint
Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.
Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....
Aber ganz genau kriegt man das nur so heraus:
Du siehst, das ist etwas besser, aber grandios auf keinen Fall, denn wenn H nicht gefunden wird, schreibt er natürlich nix ins Log auf h:\
Ist das ne Freigabe oder ein lokaler Datenträger in der Kiste?
Gruß
Gruß
So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint
Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.
Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....
Moin,
So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint
Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.
Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....
Aber ganz genau kriegt man das nur so heraus:
fetchperso.cmd:
echo fetchperso.cmd
SET LOGFILE=h:\scripts\Personalstamm\personal
echo "Masterdate transfer starting">>%LOGFILE%.log
echo Date: %date%>>%LOGFILE%.log
echo time: %time:~-11,8%>>%LOGFILE%.log
if exist h:\scripts\Personalstamm\. echo Drive h ready>>%LOGFILE%.log
echo ConnecttoSFTPServer>>%LOGFILE%.log
SET LOGFILE=h:\scripts\Personalstamm\personal1.log
Set filetodownload=?
call psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT>>%LOGFILE%
if not exist %filetodownload% goto error
copy h:\scripts\Personalstamm\%filetodownload% "H:\%mesname%\lohn_exp\">>%LOGFILE%
del h:\scripts\Personalstamm\%filetodownload%.8>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.7 %filetodownload%.8>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.6 %filetodownload%.7>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.5 %filetodownload%.6>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.4 %filetodownload%.5>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.3 %filetodownload%.4>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.2 %filetodownload%.3>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.1 %filetodownload%.2>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload% %filetodownload%.1>>%LOGFILE%
dir h:\scripts\Personalstamm\%filetodownload%.1 |find "%date% %% echo "Job finished successfully">>%LOGFILE%
goto ende
:fehler
echo "Job failed">>%LOGFILE%
:ende
echo Date: %date%>>%LOGFILE%
echo time: %time:~-11,8%>>%LOGFILE%
echo "---------------------------">>%LOGFILE%
File 3 (SFTPCommands.DAT)
bin
cd out
get pers_aps.dat
bye
Du siehst, das ist etwas besser, aber grandios auf keinen Fall, denn wenn H nicht gefunden wird, schreibt er natürlich nix ins Log auf h:\
Ist das ne Freigabe oder ein lokaler Datenträger in der Kiste?
Gruß
Gruß
Salü,
mit welchem Account läuft denn das Script?
Nehm (d)einen Rechner, nimm die Zugangsdaten im task, mit denen du angemeldet bist und mache 3 pausen in das Script rein.
Dann siehst du auch, was er von dir will oder nicht will.
btw: ist dir aufgefallen, dass ich aus deinen 2 Scripts eines gemacht habe und das Log so hybscher aussieht und vor allem ein Call vorm FTP Befehl steht?
Das ist deutlich sinniger, denn so (wie du es vorher hattest) rennt der lösch & Dateinamenumstricker evtl. schon, wenn die Datei gar nicht da ist, weil die noch gefetcht wird.
again: Auf die Frage, ob Heinrich ein lokales oder Netzwerklaufwerk ist, hast du immer noch nix geschrieben.
Normalerweise reagiere ich da nicht so gelassen...
Gruß
mit welchem Account läuft denn das Script?
Nehm (d)einen Rechner, nimm die Zugangsdaten im task, mit denen du angemeldet bist und mache 3 pausen in das Script rein.
Dann siehst du auch, was er von dir will oder nicht will.
- vor 13 (FTP) und danach eine Pause und als letzte Zeile.
btw: ist dir aufgefallen, dass ich aus deinen 2 Scripts eines gemacht habe und das Log so hybscher aussieht und vor allem ein Call vorm FTP Befehl steht?
Das ist deutlich sinniger, denn so (wie du es vorher hattest) rennt der lösch & Dateinamenumstricker evtl. schon, wenn die Datei gar nicht da ist, weil die noch gefetcht wird.
again: Auf die Frage, ob Heinrich ein lokales oder Netzwerklaufwerk ist, hast du immer noch nix geschrieben.
Normalerweise reagiere ich da nicht so gelassen...
Gruß
Zitat von @Grosser-Bruder:
Hey MIchael,
ist grade in der Klärung. Schauen wir mal, ob wir heute noch eine Antwort erhalten..
*grmblfix*Hey MIchael,
ist grade in der Klärung. Schauen wir mal, ob wir heute noch eine Antwort erhalten..
da öffnet man das ftp Programm und schaut mit netstat -a welche Ports offen sind und die Suppe ist geklärt.
Und da du es irgendwie schaffst, meine Gegenfrage bezüglich des Heinrichs wiederholt zu ignorieren, mach ich das mit deinem Problem ab jetzt auch.
MfG
N8
moin,
schau mal unter secpol.msc, ob er User in der gruppe "log on as batch job" überhaupt drin steht.
Wie ich die ganze Zeit schon vermutet habe (auch das "dämliche" Script wurde gestartet ins Logfile schreiben - passiert ja nicht) startet das Script halt schlicht und einfach nicht.
Und deine letzten Zeilen deuten darauf hin, dass der User nicht in der Gruppe steckt.
Gruß
schau mal unter secpol.msc, ob er User in der gruppe "log on as batch job" überhaupt drin steht.
Wie ich die ganze Zeit schon vermutet habe (auch das "dämliche" Script wurde gestartet ins Logfile schreiben - passiert ja nicht) startet das Script halt schlicht und einfach nicht.
Und deine letzten Zeilen deuten darauf hin, dass der User nicht in der Gruppe steckt.
Jeder versucht, den Fehler an dem Script zu suchen
Stimmt nicht...Gruß