将文件复制到远程计算机

Copy a file to a remote computer

我已经做了两个非常棒的实例; 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

我的问题是:

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

  • 一个'Normal'副本(不使用会话对象)

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

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

但是,如果文件在远程机器上,并且您需要将该文件 复制到 您登录的机器,那么 Source 应为 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,并且与 您的 [=89] 上的管理员不同=] 电脑.
因此,您很可能没有目标文件夹的访问权限。 您可以通过向 Copy-Item cmdlet 添加参数 -Credential $cred 来授予自己权限(当然,如果您知道正确的凭据)。使用

很容易获得这样的凭据对象
$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$,而无需一直通过管理共享。

希望这能解释更多