2011-12-19 14 views
6

Sto provando a SFTP un file da PowerShell utilizzando psftp.exe (putty). Posso eseguire un singolo comando come open, ma ho bisogno di cambiare la directory predefinita e quindi inserire il file. Il seguente codice mi porta a psftp ma ignora le righe da cd .. a ciao. Credo di poter eseguire un file batch che ha i comandi sftp ma, se possibile, voglio farlo usando PowerShell.Chiamare più comandi da powershell e.g psftp

$file = "C:\Source\asdf.csv" 
$user = "user" 
$pass = "pass" 
$hst = "host" 
$path="C:\ProgramFiles\psftp.exe" 
$cmd = @" 
-pw $pass [email protected]$hst 
cd .. 
cd upload 
put $file 
bye 
"@ 

invoke-expression "$path $cmd" 

risposta

6

dare una prova:

$file = "C:\Source\asdf.csv" 
$user = "user" 
$pass = "pass" 
$hst = "host" 
$path="C:\ProgramFiles\psftp.exe" 
$cmd = @(
"cd ..", 
"cd upload", 
"put $file", 
"bye" 
) 

$cmd | & $path -pw $pass "[email protected]$hst" 

In risposta alle domande nel commento:

La prima parte, "$ cmd |" Tubi il contenuto di $ cmd al comando che segue. Poiché è un programma esterno (al contrario di un cmdlet o una funzione) invierà il contenuto di $ cmd a stdin del programma esterno.

La parte "percorso $ &" dice di trattare il contenuto di $ percorso come un comando o nome di programma ed eseguirlo.

Il resto della riga viene passato al programma esterno come argomenti della riga di comando.

+0

Funziona alla grande. quindi abbiamo messo i comandi in un array e tu mi hai perso da lì. perché abbiamo & $ path -pw $ pass .. alla fine e $ cmd all'inizio? e cosa fa e realizza? – Afr

+0

hey @OldFart c'è un modo per catturare il messaggio di errore dal prompt dei comandi, proprio ora quando controllo $ lastexitcode è 0 – Afr

Problemi correlati