首页 > 解决方案 > 如何使用 PowerShell 将远程服务器上的文件移动到同一远程服务器上的另一个位置

问题描述

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

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

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

谷歌搜索给了我很多材料,但我无法让它发挥作用。目前,我不确定我是否以某种方式错误地指定了路径,或者在针对外部、安全的 Unix 服务器工作时是否无法使用普通命令。

对于复制文件,我不能使用Copy-Item,因此函数Get-SCPFile. 我可以想象远程移动、重命名和列出项目是不可能的,因为同样的原因(不管那个原因是什么)。

尽管该值用于成功复制文件且脚本位于顶部,但此示例以及示例都会产生错误找不到路径。我很确定这是一个误导性的错误消息(虽然不是完全确定)。

$file = "\\" + $server + "" + $origin  + "" + $target + ".csv"
# \\L234231.vds.afm.se/var/trans/ut/drish/sxx/meta001.csv
Remove-Item $file -force

许多答案(像这样)都非常简单,这支持了我的理论,即 Unix 和安全的结合会带来额外的挑战。也许我对这个问题的措辞不够好。

还有更高级的示例,仍然无法正常工作,只是挂起窗口而没有错误消息。我觉得我的能力使我无法估计这种方法的错误程度。

标签: powershellpowershell-remoting

解决方案


在 PowerShell 中,您可以从您的系统在另一个系统上远程创建一个 PowerShell 会话(PSSession)(并在您的系统上创建另一个会话,但那是细节......)并在那里执行您的命令。

您可以创建一个 PSSession,New-PSSession但很多 cmdlet 都有一个-ComputerName参数(或类似的东西),这样它们就可以在不先创建 PSSession 的情况下远程执行。

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

以下是关于_PSSessions的更多信息,以及将其与 SSH 一起使用以连接到 Linux


推荐阅读