2011-12-19 1 views
6

psftp.exe(パテ)を使用してpowershellからファイルをSFTPしようとしています。私はopenなどの単一のコマンドを実行できますが、デフォルトのディレクトリを変更してからファイルを置く必要があります。次のコードはpsftpに私を連れて行きますが、cdから.. byeへの行は無視します。私はsftpコマンドを持っているバッチファイルを実行することができますが、可能であれば私は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

+0

ちょっと@OldFartは、コマンドプロンプトからエラーメッセージをキャプチャする方法ですが、今は$ lastexitcodeが0であることをチェックします – Afr

関連する問題