2

I have a PowerShell script that produces a text file. At the end, I would like to copy this file to a Linux server. From CMD.EXE, I can use PSCP (from Putty), it works and copies the file. But from PowerShell, either interactively or from a PowerShell batch, PSCP has no visible effect: no error messages and the file is not copied. Even if I run simply .\PSCP.EXE without arguments, on the CMD command line it displays the options, but from PowerShell it does nothing. Can PSCP be used from inside PowerShell?

4

4 回答 4

3

从 PowerShell 中执行程序的工作方式应该与 CMD 相同,但取决于该程序如何生成其输出(是否写入 STDOUT、STDERR 等?),其行为可能不同。

我一直在 .NET 应用程序和 PowerShell 脚本中使用Rebex 的FTPS 和 SFTP 组件;SFTP 包包含一个 SCP 类。是的,它要花钱,但根据您的使用情况,这可能是值得的。

于 2012-12-03T16:07:16.740 回答
2

刚刚尝试从 PowerShell 自动化 PSCP。请记住使用 pscp 的-batch参数,这样,如果您执行诸如输入错误密码之类的操作,就不会被要求输入。

$Cmd = "pscp -l username -pw password -batch c:\folder\file.txt server:/home/user1"
Invoke-Expression "& $( $Cmd )"

否则,您的脚本将停止运行。

于 2016-10-05T14:56:57.980 回答
1

如果在脚本内部使用 pscsp,例如 perl

  • 没有和号

  • 像这样引用“我的密码”

例如

"C:\Program Files\Putty\pscp.exe" -C -p -pw "password"  /local_dir/file_to_copy  user@hostname:/remote_directory

在 perl 中(注意 \ 是“字符串”中的转义字符)

$cmd = q("C:\Program Files\Putty\pscp.exe" -C -p -pw "password"  /local_dir/file_to_copy  user@hostname:/remote_directory);

system($cmd);
于 2013-03-21T12:23:22.310 回答
1

是的 - 大多数可执行文件都可以从 PowerShell 中调用。pscp.exe 在这方面没有什么特别之处。您可能需要在其前面加上呼叫运算符 - 与号 - &

PS C:\>& "C:\Program Files (x86)\Putty\pscp.exe" -V
pscp: Release 0.62

以上是我的 PowerShell 提示符的直接输出。如果可执行文件的路径包含空格,则调用运算符特别有用 - 调用运算符用于告诉 PowerShell 将被视为字符串的内容视为应尝试执行的内容。

包含您尝试执行的完整命令,因为它将有助于提供更好的答案。如果您没有得到任何输出,您的 PATH 变量或其他奇怪的东西可能有问题。

于 2012-12-03T17:08:47.227 回答