PSCP是否与PowerShell一起工作?

我有一个PowerShell脚本生成一个文本文件。 最后,我想将这个文件复制到Linux服务器上。 从CMD.EXE,我可以使用PSCP(从腻子),它的工作原理和复制文件。 但是从PowerShell,无论是交互式还是PowerShell批处理,PSCP都没有明显的效果:没有错误消息,文件不被复制。 即使我运行简单。\ PSCP.EXE没有参数,在CMD命令行上它显示的选项,但从PowerShell它什么都不做。 PSCP可以从PowerShell内部使用吗?

在PowerShell中执行程序应该和CMD一样,但是取决于程序如何产生它的输出(是否写入STDOUT,STDERR,其他?),这可能会有不同的表现。

我已经在.NET应用程序和PowerShell脚本中使用了Rebex的 FTPS和SFTP 组件 ; SFTP包包含一个SCP类。 是的,这需要花钱,但取决于你的使用情况,这可能是值得的。

是的 – 大多数可执行文件都可以从PowerShell中调用。 在这方面没有什么特别的pscp.exe。 您可能需要与呼叫操作员 – &符号 – 开头:

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

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

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

如果在脚本中使用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。 请记住使用pscp的-batch参数,如果您要输入错误的密码,就不会被要求输入。

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

否则你的脚本就会停下来。