使用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 use
或New-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 $