23

在 Powershell 中,我正在运行psftp.exePuTTy 的主页。我正在这样做:

$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

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 回答