23

psftp.exePowershell では、PuTTy のホームページを実行しています。私はこれをやっています:

$cmd = "psftp.exe"
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = & $cmd $args

これは機能します。と私は印刷してい$outputます。ただし、その変数の一部の出力 (「リモート作業ディレクトリは [...]」など) のみをキャッチし、他の出力を次のようなエラー タイプにスローしています。

psftp.exe : Using username "username@ssh".
At C:\full_script.ps1:37 char:20
+         $output = & <<<<  $cmd $args
    + CategoryInfo          : NotSpecified: (Using username "username@ssh".:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

この「Using username ...」などは、通常の FTP メッセージのように見えます。すべての出力が に入れられるようにするにはどうすればよい$outputですか?

4

2 に答える 2

20

問題は、一部の出力がSTDERRに送信されており、PowerShellとCMD.EXEではリダイレクトの動作が異なることです。

コンソールプログラムの出力をPowerShellのファイルにリダイレクトする方法には、問題の適切な説明と巧妙な回避策があります。

基本的に、CMD実行可能ファイルをパラメータとして呼び出します。このような:

アップデート

実際に機能するようにコードを修正しました。:)

$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = cmd /c psftp.exe $args 2`>`&1
于 2013-03-15T17:04:06.660 に答える
11

これを試してみてください

$output = [string] (& psftp.exe 'username@ssh@ftp.domain.com' -b psftp.txt 2>&1)

エラーレコードの作成に関するPowerShellのバグがあります。キャストはそれを回避します2>&1[string]

于 2013-03-15T22:15:11.837 に答える