在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
?
答案 0 :(得分:15)
问题是某些输出正在发送到STDERR,并且重定向在PowerShell中的工作方式与CMD.EXE中的不同。
How to redirect output of console program to a file in PowerShell对问题有很好的描述,也有一个聪明的解决方法。
基本上,使用您的可执行文件作为参数调用CMD
。像这样:
我修复了我的代码,以便实际工作。 :)
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = cmd /c psftp.exe $args 2`>`&1
答案 1 :(得分:6)
试一试
$output = [string] (& psftp.exe 'username@ssh@ftp.domain.com' -b psftp.txt 2>&1)
有一个PowerShell bug关于2>&1
制作错误记录。 [string]
演员围绕着它。