使用Powershell远程复制文件

cho*_*bo2 86 powershell powershell-2.0

我正在编写一个我想从服务器A运行的PowerShell脚本.我想连接到服务器B并将文件作为备份复制到服务器A.

如果无法完成,那么我想从服务器A连接到服务器B并将文件复制到服务器B中的另一个目录.

我看到他们Copy-Item命令,但我不知道如何给它一个计算机名称.

我原本以为我可以做点什么

Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Tre*_*van 86

只需使用管理共享即可在系统之间复制文件.这种方式更容易.

Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt;
Run Code Online (Sandbox Code Playgroud)

通过使用UNC路径而不是本地文件系统路径,可以帮助确保您的脚本可以从具有这些UNC路径访问权限的任何客户端系统执行.如果您使用本地文件系统路径,那么您将转向在特定计算机上运行脚本.

这仅适用于PowerShell会话在具有两个管理共享权限的用户下运行时.我建议在服务器B上使用常规网络共享,只读访问所有人,只需调用(从服务器A):

Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose
Run Code Online (Sandbox Code Playgroud)

  • 此方法的一个可能问题是Copy-Item不支持备用凭据(如果必须使用其他用户运行该命令).在这种情况下,需要New-PSDrive方法. (9认同)

Jer*_*ert 70

PowerShell版本5开始(包含在Windows Server 2016中,可以作为早期版本的WMF 5的一部分下载),这可以通过远程处理实现.这样做的好处是,无论出于何种原因,您都无法访问共享.

为此,启动复制的本地会话必须安装PowerShell 5或更高版本.远程会议并没有需要有PowerShell的安装5 -它与PowerShell的版本低2和Windows Server版本低至2008 R2.[1]

从服务器A,创建到服务器B的会话:

$b = New-PSSession B
Run Code Online (Sandbox Code Playgroud)

然后,仍然来自A:

Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt
Run Code Online (Sandbox Code Playgroud)

将项目复制到B完成-ToSession.请注意,在这两种情况下都使用本地路径; 你必须跟踪你所在的服务器.


[1]:当从具有PowerShell 2的远程服务器复制时,请注意PowerShell 5.1中这个错误,在编写本文时,意味着递归文件复制不起作用-ToSession,显然复制不起作用全部用-FromSession.

  • 我发现两台服务器都没有必要安装PS 5.我刚刚进行了一次成功的测试,只有源服务器(Windows 10)安装了PS 5.目标是安装了默认PS的Windows Server 2012 R2($ PSVersionTable.PSVersion报告4). (3认同)
  • 如果在源上使用-ToSession,则只有源需要安装PS 5.如果在目标上使用-FromSession,则只有目标需要安装PS 5. (2认同)

JPB*_*anc 37

为什么不使用net useNew-PSDrive创建新驱动器.

New-PsDrive:创建一个仅在powershell环境中可见的新PsDrive:

New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
Run Code Online (Sandbox Code Playgroud)

净使用:在操作系统的所有部分创建一个可见的新驱动器.

Net use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
Run Code Online (Sandbox Code Playgroud)


shy*_*an1 15

如果远程文件需要访问您的凭据,您可以使用cmdlet New-Object生成System.Net.WebClient对象以"远程复制文件",如此

$Source = "\\192.168.x.x\somefile.txt"
$Dest   = "C:\Users\user\somefile.txt"
$Username = "username"
$Password = "password"

$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)

$WebClient.DownloadFile($Source, $Dest)
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要上传文件,可以使用UploadFile

$Dest = "\\192.168.x.x\somefile.txt"
$Source   = "C:\Users\user\somefile.txt"

$WebClient.UploadFile($Dest, $Source)
Run Code Online (Sandbox Code Playgroud)

  • 侦测到骇客:) (2认同)