2011-12-19 23 views
6

我想從使用psftp.exe(putty)的powershell SFTP文件。我可以運行單個命令如打開,但我需要更改默認目錄,然後將該文件。下面的代碼將我帶到psftp,但忽略了從cd ..到bye的行。我想我可以運行一個具有sftp命令的批處理文件,但如果可能的話我想使用powershell來完成。從powershell調用多個命令,例如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" 

回答

6

試試這個:

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

在回答中註釋的問題:

第一部分, 「$ CMD |」將$ cmd的內容傳遞給後面的命令。由於它是一個外部程序(與cmdlet或函數相反),它會將$ cmd的內容發送到外部程序的stdin。

「& $ path」部分表示將$ path的內容視爲命令或程序名稱並執行它。

該行的其餘部分作爲命令行參數傳遞給外部程序。

+0

這很好。所以我們把這些命令放在一個數組中,你從那裏丟失了我。爲什麼我們有&$ path -pw $ pass ..在最後和$ cmd在開頭?什麼和完成? – Afr 2011-12-20 01:13:30

+0

嘿@OldFart有沒有辦法從命令提示符捕獲錯誤消息,現在當我檢查$ lastexitcode是0 – Afr 2012-01-06 23:40:30