108

我正在编写一个要从服务器 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)

我怎样才能做到这一点?

4

5 回答 5

106

PowerShell 版本 5 开始(包含在 Windows Server 2016 中,可作为早期版本的 WMF 5 的一部分下载),这可以通过远程处理实现。这样做的好处是,即使出于某种原因您无法访问共享,它也能正常工作。

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

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

$b = New-PSSession B

然后,仍然来自 A:

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

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


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

于 2016-08-24T11:48:51.290 回答
103

只需使用管理共享在系统之间复制文件。这种方式要容易得多。

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

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

于 2012-05-24T18:48:34.177 回答
42

使用net useNew-PSDrive创建新驱动器:

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

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

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

Net use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
于 2012-05-24T17:11:40.127 回答
18

万一远程文件需要您的凭据才能访问,您可以使用 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)

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

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

$WebClient.UploadFile($Dest, $Source)
于 2014-06-20T04:59:33.223 回答
0

以上答案都不适合我我不断收到此错误:

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 address of nanoserver}\C$
于 2016-02-20T09:55:33.030 回答