将文件复制到远程计算机

问题描述

我在天上做了两个实例; cl1srv1。我正在尝试将文件夹从 cl1 复制到 srv1。我可以使用命令

Enter-PSSession -Credential $cred IP_ADD_SRV1

cl1进入srv1。我一直在查看 copy-item 的帮助站点,发现这个命令名为文件复制到远程计算机。这是正确的吗?命令是

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"

copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_copy\" -ToSession $Session

我的问题是:

  • ComputerName 只是我在 Microsoft 远程桌面上调用名称吗?
  • 我应该把什么作为凭证?
  • 我的问题是我要复制的两个文件夹的路径几乎相同。有人告诉我我需要使用 UNC 路径。我需要使用这个吗 在复制项目和目的地?我对此很陌生,但确实如此 这看起来很适合 UNC 路径:\\cl1\C$\Users\Admin\Test。 ?

解决方法

您可以通过多种方式将文件或文件夹从 PC 复制到远程机器。

  • “普通”副本(不使用会话对象)

如果您登录的电脑名为 cl1 并且文件在该电脑上(来源),您需要以 UNC 格式指定目的地

Copy-Item -Path 'C:\SourceFolder\TheFileToCopy.txt' -Destination '\\srv1\c$\DestinationFolder'

但是,如果文件在远程机器上并且您需要将该文件复制您登录的机器,那么源应该是 UNC 格式:

Copy-Item -Path '\\srv1\c$\TheFileToCopy.txt' -Destination 'C:\DestinationFolder'
  • 使用会话对象

如果您登录的电脑名为 cl1 并且该文件在该计算机(源)上并且您已经使用 $session = New-PSSession –ComputerName srv1 建立了到远程机器的会话,那么您需要同时指定Path 和 Destination 参数作为本地路径:

Copy-Item -Path 'C:\SourceFolder\TheFileToCopy.txt' -Destination 'C:\DestinationFolder' -ToSession $session

Credential 对象包含用于对远程机器进行身份验证的用户名和(加密的)密码。为此使用 Get-Credential cmdlet


您似乎想将目录从计算机 Cl1 上的源复制到远程服务器 srv1 上的路径。
从您的评论中,我看到 sourceC:\Users\Admin\Test(即您登录的计算机的本地路径,即 Cl1)并且 目标将是远程计算机上的 C:\Users\Admin\Backup
这就是为什么您需要对目标路径使用 UNC 格式,C:\Users\Admin\Backup --> \\srv1\C$\Users\Admin\Backup

使用服务器名称需要正确设置 DNS,因此您也可以使用该服务器的 IP 地址而不是其名称。假设服务器有 IP 10.212.141.129,则目的地的 UNC 路径将变为 \\10.212.141.129\C$\Users\Admin\Backup

但是.. 您的目标是所谓的 Administrative Share (C$),为此您需要拥有权限。此外,您还针对用户 Admin(即远程 计算机上的用户 Admin,与 计算机上的管理员不同。
因此,您很可能没有目标文件夹的访问权限。 您可以通过将参数 -Credential $cred 添加到 Copy-Item cmdlet 来授予自己权限(当然,如果您知道正确的凭据)。这样的凭证对象很容易通过使用

$cred = Get-Credential -Message "Please enter Domain Admin credentials"

要使 Copy-Item 能够将某些内容复制到某处,您必须确保目标路径存在。
尝试使用相同的 UNC 命名约定在文件资源管理器中导航到该远程路径。

例如,如果路径 \\srv1\C$\Users\Admin 存在,但没有文件夹 Backup,(并且您有权这样做),请从资源管理器中或在 PowerShell 中创建该文件夹:

if (-not (Test-Path -LiteralPath '\\srv1\C$\Users\Admin\Backup' -PathType Container)) {
    $null = New-Item -Path '\\srv1\C$\Users\Admin\Backup' -ItemType Directory
}

接下来,您应该能够使用

将所有文件和子文件夹从源目录复制到目标目录
Copy-Item -Path 'C:\Users\Admin\Test' -Destination '\\srv1\C$\Users\Admin\Backup' -Recurse  # -Credential $cred # can go here
# local source on cl1  ^^^^                              ^^^^ to remote destination on srv1

当然,您也可以使用我之前描述的 Session 方法。在这种情况下,您应该使用本地路径名 (C:\whatever) 并且不需要 UNC 路径,因为 $session 对象会为您处理这些。

可能在目标服务器上,有一个驻留在其他地方的共享设置。例如文件夹 X:\Students\Course1\Output 并且该路径已共享为 StudentMaterial$。 如果可能是这种情况(请咨询您的老师),您可以将目的地设置为 \\srv1\StudentMaterial$,而无需一直通过管理共享。

希望这能解释更多

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...