如何使用PowerShell将远程服务器上的文件移动到同一远程服务器上的另一个位置

问题描述

当前,我运行以下命令将文件提取到本地系统。

Get-SCPFile 
  -ComputerName $server 
  -Credential $credential
  -RemoteFile ($origin + $target + ".csv") 
  -LocalFile ($destination + $target + ".csv")

它可以按我的意愿工作(尽管很糟糕,我无法通过正则表达式和/或通配符复制多个文件)。但是,在执行该操作之后,我想将远程文件移动到远程服务器上的另一个目录,因此,我希望将它们放置在$origin的{​​{1}}上,而不是$server在同一服务器上。今天,我必须为此使用PuTTY,但是从PS进行操作会更加方便。

Google搜索给了我很多资料,但我无法使它起作用。目前,我不确定是否以某种方式不正确地指定了路径,或者在与外部安全的Unix服务器打交道时是否无法使用普通命令。

对于复制文件,我不能使用$origin + "/done",因此不能使用功能copy-Item。我可以想象,出于相同的原因(无论是什么原因),都不可能远程移动,重命名和列出商品。

This example以及this one都会产生错误找不到路径,尽管该值用于成功复制文件,且脚本位于顶部。我很确定这是一个误导性的错误消息(不过,我并不确定)。

Get-SCPFile

许多答案(例如this)非常简单,这支持了我的理论,即Unix和安全性的结合带来了额外的挑战。也许我在措辞上不够好。

还有更高级的examples,仍然无法正常工作,只是挂上了窗口,没有任何错误消息。我觉得我的能力使我无法估计这种方法的不正确程度。

解决方法

在PowerShell中,您可以从另一个系统上的系统创建一个PowerShell会话(PSSession),然后在另一个系统上(并进入系统上的另一个Session,但这很详细...),然后在其中执行命令。

您可以使用New-PSSession创建PSSession,但是许多cmdlet都具有-ComputerName参数(或类似的参数),因此可以无须执行而无需先创建PSSession即可执行它们。

PSSession可以与Enter-PSSession一起使用以获取交互式Session,也可以与Invoke-Command一起使用以执行ScriptBlock。这样,您可以直接在目标服务器上测试Remove-Item命令。根据设置,您可能需要在远程会话中使用Linux语法。

还有更多信息about_PSSessions和使用with SSH to connect to Linux