2011-12-19 13 views
6

Psftp.exe (putty) kullanarak powershell'den SFTP dosyasına bir dosya çalışıyorum. Açık gibi tek bir komut çalıştırabilirim ancak varsayılan dizini değiştirmem ve dosyayı koymam gerekiyor. Aşağıdaki kod beni psftp'ye götürür fakat cd'lerden satırları görmezden güle güle. Ben sftp komutları olan bir toplu iş dosyasını çalıştırabilirim ama eğer mümkünse powershell kullanarak gerçekleştirmek istiyorum.Powershell'den çoklu komutları çağırın. 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" 

cevap

6

bu Deneyin:

açıklamada sorulara cevap olarak
$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" 

:

ilk bölümü, "$ cmd |" Aşağıdaki komut için $ cmd'nin içeriklerini koyar. Harici bir program olduğu için (cmdlet veya fonksiyonun aksine), $ cmd'nin içeriğini harici programın stdinine gönderir.

"& $ yol" bölümü, $ path içeriğinin bir komut veya program adı olarak ele alınacağını ve çalıştırılacağını belirtir.

Satırın geri kalanı komut satırı argümanları olarak harici programa aktarılır.

+0

Bu harika çalışıyor. Bu yüzden komutları bir diziye koyduk ve oradan beni kaybettin. neden sonunda & $ path -pw $ pass var? Başlangıçta $ cmd? ve ne yapar ve başarır? – Afr

+0

hey @OldFart, $ lastexitcode olduğunu kontrol ettiğimde hemen komut isteminden hata mesajı almanın bir yolu var 0 – Afr