问题描述
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语法。