2011-12-19 28 views
6

Estoy tratando de SFTP un archivo de powershell con psftp.exe (masilla). Puedo ejecutar un solo comando como abrir pero necesito cambiar el directorio predeterminado y luego poner el archivo. El siguiente código me lleva a psftp pero ignora las líneas de cd .. to adiós. Supongo que puedo ejecutar un archivo por lotes que tenga los comandos sftp pero, si es posible, quiero lograr el uso de powershell.Llamar a múltiples comandos de powershell, por ejemplo, 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" 

Respuesta

6

seguirlo:

$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" 

En respuesta a las preguntas en el comentario:

La primera parte, "$ cmd |" canaliza el contenido de $ cmd al comando que sigue. Dado que es un programa externo (a diferencia de un cmdlet o función), enviará los contenidos de $ cmd al stdin del programa externo.

La parte "& $ path" dice que trate los contenidos de $ path como un comando o nombre de programa y ejecútelos.

El resto de la línea se pasa al programa externo como argumentos de línea de comandos.

+0

Esto funciona muy bien. así que pusimos los comandos en una matriz y me perdiste a partir de ahí. ¿Por qué tenemos & $ path -pw $ pass ... al final y $ cmd al principio? y ¿qué hace y logra? – Afr

+0

hey @OldFart hay una forma de capturar el mensaje de error desde el símbolo del sistema, ahora mismo cuando verifico $ lastexitcode es 0 – Afr

Cuestiones relacionadas