dani
Goto Top

Powershell - Ausführbare Datei mit Parametern starten

Guten Morgen zusammen,
ich versuche aus einem Skript heraus eine Anwendung mit Parametern zu starten.

$Cmd = 'C:\Program Files\lftp\bin\lftp.exe'  
$Arg1 = '-e "mirror --exclude transfer_log --parallel=5 / //netapp/test;quit"'  
$Arg2 = '-u username:passwort'  
$Arg3 = 'ftp.domain.de'  
 
& $Cmd $Arg1 $Arg2 $Arg3
Bei der Ausführung erhalte ich folgenden Fehler:
lftp.exe : lftp: unknown option -- exclude
In C:\Jobs\backup.ps1:7 Zeichen:1
+ & $Cmd $Arg1 $Arg2 $Arg3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (lftp: unknown option -- exclude:String) , RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
Try `lftp --help' for more Information
#
Wie kommt die Powershell auf das Leerzeichen zwischen "--" und "exclude"? Da ist keins...
Sicherheitshalber den Quellcode über das Notepad kopiert um evtl. Formatierungszeichen, etc... zu entfernen.


Gruß,
Dani

Content-Key: 258304

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: colinardo
colinardo Dec 22, 2014 updated at 10:43:20 (UTC)
Goto Top
Hallo Dani,
schreib die Zeile entweder so:
&$Cmd "$Arg1 $Arg2 $Arg3"
oder starte die Anwendung mit start-process und -Argumentlist
Start-Process $cmd -Wait -ArgumentList $Arg1,$Arg2,$Arg3

Frohe Feiertage
Grüße Uwe
Member: Dani
Dani Dec 22, 2014 at 10:30:33 (UTC)
Goto Top
Hallo Uwe,
die Fehlermeldung bleibt leider die Gleiche.


Gruß,
Dani
Member: colinardo
colinardo Dec 22, 2014 updated at 11:14:42 (UTC)
Goto Top
habe gerade wenig Zeit, aber schau mal hier rein:
http://edgylogic.com/blog/powershell-and-external-commands-done-right/
Da bekommst du eine echoargs.exe mit der du dir anzeigen lassen kannst wie die Parameter an deine Anwendung tatsächlich übergeben werden. Und noch mehr Infos zum Ausführen von externen Befehlen.

Grüße Uwe
Member: colinardo
colinardo Dec 22, 2014 updated at 12:30:48 (UTC)
Goto Top
Nachtrag: so sollte es normalweise laufen:
$Cmd = 'C:\Program Files\lftp\bin\lftp.exe'  
$Arg1 = '-e \"mirror --exclude transfer_log --parallel=5 / //netapp/test;quit\"'  
$Arg2 = '-u username:passwort'  
$Arg3 = 'ftp.domain.de'  

&$Cmd $Arg1 $Arg2 $Arg3
Member: Dani
Dani Dec 22, 2014 updated at 12:54:31 (UTC)
Goto Top
Das Tool kannte ich noch gar nicht... Danke!
Das Ergebnis ist witzig:
Arg 0 is <-e mirror>
Arg 1 is <--exclude>
Arg 2 is <transfer_log>
Arg 3 is <--parallel=5>
Arg 4 is </>
Arg 5 is <//netapp/test;quit -u username:passwort ftp.domain.de>
Das heißt: Leerzeichen sind nicht erwünscht. Auf der verlinkten Seite steht:
But not in Powershell. That will simply confuse it. Instead, just place the entire parameter in quotes, e.g
Äh... habe ich doch...


Gruß,
Dani
Member: colinardo
colinardo Dec 22, 2014 updated at 13:12:34 (UTC)
Goto Top
mach wie in meinem letzen Post geschrieben, Backslashes vor die internen Anführungszeichen im ersten Parameter, dann sind es effektiv wie gewünscht 3 Parameter.
Member: Dani
Dani Dec 22, 2014 at 13:58:07 (UTC)
Goto Top
Das Tool gibt nun alle Parameter korrekt wieder:
Arg 0 is <-e "mirror --exclude transfer_log --parallel=5 / //netapp/test;quit">  
Arg 1 is <-u username:password>
Arg 2 is <ftp.domain.de>

Die Fehlermeldung spuckt nun aus:
 lftp.exe : Unknown command `mirror --exclude transfer_log --parallel=5 / //netapp02/backup-inetsites;quit'.  
Vor "mirror" steht nun das Escapezeichen...
Member: colinardo
colinardo Dec 22, 2014 updated at 15:43:29 (UTC)
Goto Top
Geh ich recht in der Annahme das das Teil ursprünglich aus der Unix-Welt stammt ?
Muss das Tool mal testen, ansonsten weich übergangsweise auf die Kommandozeilen-Tools von winscp aus die können das gewünschte ebenfalls.

Bis dahin...
Member: Dani
Dani Dec 22, 2014 updated at 15:43:28 (UTC)
Goto Top
Geh ich recht in der Annahme das das Teil ursprünglich aus der Unix-Welt stammt ?
Ja. face-smile

Muss das Tool mal testen, ansonsten weich übergangsweise auf die Kommandozeilen-Tools von winscp aus die können das gewünschte ebenfalls.
Hab's temporär in eine Batchdatei gespeichert und über Task eingebunden.

Danke dir, bis später... face-smile
Member: colinardo
Solution colinardo Dec 22, 2014, updated at Dec 23, 2014 at 12:03:53 (UTC)
Goto Top
p.s. ansonsten bleibt dir ja noch folgende Variante ohne die Nutzung von Variablen
$Cmd = 'C:\Program Files\lftp\bin\lftp.exe'   
&$Cmd --% -e "mirror --exclude transfer_log --parallel=5 / //netapp/test;quit" -u username:password ftp.domain.de  
das läuft in jedem Fall face-wink (ab PS 3.0)
Member: Dani
Dani Dec 23, 2014 at 08:36:01 (UTC)
Goto Top
Guten Morgen Uwe,
was bedeutet --% in diesem Fall? Habe ich so noch nirgends gelesen.


Gruß,
Dani
Member: colinardo
colinardo Dec 23, 2014 updated at 09:06:54 (UTC)
Goto Top
Zitat von @Dani:

Guten Morgen Uwe,
was bedeutet --% in diesem Fall? Habe ich so noch nirgends gelesen.

Moin Dani,
dieser spezielle Parameter sagt der Powershell "leite alles was hinter diesem Parameter kommt, so weiter wie es dort steht"
d.h. hinter --% wird rein garnichts mehr expandiert oder sonst wie geparst.

Grüße Uwe

p.s. das FTP Tool weigert sich bisher hartnäckig mir zu gehorchen face-wink
Member: Dani
Dani Dec 23, 2014 at 09:28:04 (UTC)
Goto Top
Gleich notieren... werd ich noch öfters brauchen können. face-smile
Die letzte Variante von dir funktioniert problemlos - vielen Dank dafür!


Gruß,
Dani

P.S. Das FTP-Tool, das Weiblein... damit ist alles gesagt. face-wink