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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: colinardo
colinardo 22.12.2014 aktualisiert um 11:43:20 Uhr
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
Mitglied: Dani
Dani 22.12.2014 um 11:30:33 Uhr
Goto Top
Hallo Uwe,
die Fehlermeldung bleibt leider die Gleiche.


Gruß,
Dani
Mitglied: colinardo
colinardo 22.12.2014 aktualisiert um 12:14:42 Uhr
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
Mitglied: colinardo
colinardo 22.12.2014 aktualisiert um 13:30:48 Uhr
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
Mitglied: Dani
Dani 22.12.2014 aktualisiert um 13:54:31 Uhr
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
Mitglied: colinardo
colinardo 22.12.2014 aktualisiert um 14:12:34 Uhr
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.
Mitglied: Dani
Dani 22.12.2014 um 14:58:07 Uhr
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...
Mitglied: colinardo
colinardo 22.12.2014 aktualisiert um 16:43:29 Uhr
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...
Mitglied: Dani
Dani 22.12.2014 aktualisiert um 16:43:28 Uhr
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
Mitglied: colinardo
Lösung colinardo 22.12.2014, aktualisiert am 23.12.2014 um 13:03:53 Uhr
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)
Mitglied: Dani
Dani 23.12.2014 um 09:36:01 Uhr
Goto Top
Guten Morgen Uwe,
was bedeutet --% in diesem Fall? Habe ich so noch nirgends gelesen.


Gruß,
Dani
Mitglied: colinardo
colinardo 23.12.2014 aktualisiert um 10:06:54 Uhr
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
Mitglied: Dani
Dani 23.12.2014 um 10:28:04 Uhr
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