使用Powershell远程复制文件

我正在写一个powershell脚本,我想从服务器A运行。我想连接到服务器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) 

我怎样才能做到这一点?

只需使用pipe理共享在系统之间复制文件。 这种方式更容易。

 Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt; 

通过使用UNCpath而不是本地文件系统path,可以帮助确保您的脚本可以从任何可访问这些UNCpath的客户端系统执行。 如果您使用本地文件系统path,那么您正转向在特定计算机上运行脚本。

这只适用于PowerShell会话在拥有两个pipe理共享权限的用户下运行。 我build议在服务器B上使用常规networking共享,只读访问每个人,并简单地(从服务器A)调用:

 Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose 

从PowerShell版本5开始(包含在Windows Server 2016中, 可以作为WMF 5的早期版本的一部分下载 ),这是远程处理的可能。 这样做的好处是,即使无论出​​于何种原因,您都无法访问股票,它仍然有效。

为此,启动复制的本地会话必须安装PowerShell 5或更高版本。 远程会话不需要安装PowerShell 5,它可以使用低至2的PowerShell版本以及低至2008 R2的Windows Server版本。

从服务器A,创build一个会话到服务器B:

 $b = New-PSSession B 

然后,从A:

 Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt 

将项目复制到B是使用-ToSession完成的。 请注意,在这两种情况下都使用本地path。 你必须跟踪你在哪个服务器上。

为什么不使用net useNew-PSDrive创build一个新的驱动器。

新PsDrive:创build一个新的PsDrive只在PowerShell环境中可见:

 New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share Copy-Item BigFile Y:\BigFileCopy 

networking使用:在操作系统的所有部分创build一个新的驱动器。

 Net use y: \\ServerName\Share Copy-Item BigFile Y:\BigFileCopy 

以防万一,远程文件需要您的凭据进行访问,您可以生成一个System.Net.WebClient对象使用cmdlet New-Object来“远程复制文件”,就像这样

 $Source = "\\192.168.xx\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) 

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

 $Dest = "\\192.168.xx\somefile.txt" $Source = "C:\Users\user\somefile.txt" $WebClient.UploadFile($Dest, $Source) 

上面的答案都没有为我工作。 保持这个错误:

 Copy-Item : Access is denied + CategoryInfo : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException> + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand 

所以对我来说是这样的:

 netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes 

然后从我的主机我的机器在运行框只是做这个\ {ip的nanoserver} \ C $