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 回答
从 PowerShell 中执行程序的工作方式应该与 CMD 相同,但取决于该程序如何生成其输出(是否写入 STDOUT、STDERR 等?),其行为可能不同。
我一直在 .NET 应用程序和 PowerShell 脚本中使用Rebex 的FTPS 和 SFTP 组件;SFTP 包包含一个 SCP 类。是的,它要花钱,但根据您的使用情况,这可能是值得的。
刚刚尝试从 PowerShell 自动化 PSCP。请记住使用 pscp 的-batch
参数,这样,如果您执行诸如输入错误密码之类的操作,就不会被要求输入。
$Cmd = "pscp -l username -pw password -batch c:\folder\file.txt server:/home/user1"
Invoke-Expression "& $( $Cmd )"
否则,您的脚本将停止运行。
如果在脚本内部使用 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);
是的 - 大多数可执行文件都可以从 PowerShell 中调用。pscp.exe 在这方面没有什么特别之处。您可能需要在其前面加上呼叫运算符 - 与号 - &
:
PS C:\>& "C:\Program Files (x86)\Putty\pscp.exe" -V
pscp: Release 0.62
以上是我的 PowerShell 提示符的直接输出。如果可执行文件的路径包含空格,则调用运算符特别有用 - 调用运算符用于告诉 PowerShell 将被视为字符串的内容视为应尝试执行的内容。
请包含您尝试执行的完整命令,因为它将有助于提供更好的答案。如果您没有得到任何输出,您的 PATH 变量或其他奇怪的东西可能有问题。