powershell - 如何使用 PowerShell 将远程服务器上的文件移动到同一远程服务器上的另一个位置
问题描述
目前,我运行以下命令将文件提取到本地系统。
Get-SCPFile
-ComputerName $server
-Credential $credential
-RemoteFile ($origin + $target + ".csv")
-LocalFile ($destination + $target + ".csv")
它可以按我的意愿工作(尽管我无法通过正则表达式和/或通配符复制多个文件,这很糟糕)。但是,在执行操作后,我想将远程文件移动到远程服务器上的另一个目录中,而不是驻留在$origin
at 中$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 和安全的结合会带来额外的挑战。也许我对这个问题的措辞不够好。
还有更高级的示例,仍然无法正常工作,只是挂起窗口而没有错误消息。我觉得我的能力使我无法估计这种方法的错误程度。
解决方案
在 PowerShell 中,您可以从您的系统在另一个系统上远程创建一个 PowerShell 会话(PSSession)(并在您的系统上创建另一个会话,但那是细节......)并在那里执行您的命令。
您可以创建一个 PSSession,New-PSSession
但很多 cmdlet 都有一个-ComputerName
参数(或类似的东西),这样它们就可以在不先创建 PSSession 的情况下远程执行。
PSSession 可用于Enter-PSSession
获取交互式会话或Invoke-Command
用于执行 ScriptBlock。这样您就可以Remove-Item
直接在目标服务器上测试您的命令。根据设置,您可能需要在远程会话中使用 Linux 语法。
以下是关于_PSSessions的更多信息,以及将其与 SSH 一起使用以连接到 Linux
推荐阅读
- azure-aks - 如何在 Azure Kubernetes 服务 (AKS) 上升级 Hyperledger Fabric 联盟中的链代码
- django - 无法在我用于 Nginx 和 Supervisor 的部署时的 Django 应用聊天中连接到 WebSocket Nginx
- arrays - 如何使用 map 函数列出 React 中的数组?
- visual-c++ - 程序完成后,C++ 编写操作仍在进行中
- javascript - 为什么绘制的圆圈不显示在地图上?
- flutter - Flutter:如何在 StickyHeader 或 SliverAppBar 中显示唯一的标题
- scala - 通过将列集合与另一个集合一起解包来选择 Dataframe 列
- python - Pycharm无法在pycharm中安装包-非零退出码(一)-
- powershell - 在 PowerShell 脚本中设置服务自动失败
- c# - 使用自动增量字段恢复 MySql 表中已删除的行