Powershellでは、psftp.exe
これは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
この「ユーザー名を使用...」などは、通常のFTPメッセージのように見えます。すべての出力が$output
?
問題は、いくつかの出力がSTDERRに送信されており、リダイレクトの動作がCMD.EXEとPowerShellで異なることです。
PowerShellでコンソールプログラムの出力をファイルにリダイレクトする方法 には、問題の適切な説明と巧妙な回避策があります。
基本的に、実行可能ファイルをパラメーターとしてCMD
を呼び出します。このような:
実際に動作するようにコードを修正しました。 :)
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = cmd /c psftp.exe $args 2`>`&1
これを試してみてください
$output = [string] (& psftp.exe 'username@[email protected]' -b psftp.txt 2>&1)
PowerShellがあります bug about 2>&1
エラー記録を作成します。 [string]
castはそれを回避します。