我在天上做了两个实例; cl1 和 srv1。我正在尝试将文件夹从 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
我的问题是:
答案 0 :(得分:1)
您可以通过多种方式将文件或文件夹从 PC 复制到远程机器。
如果您登录的电脑名为 cl1
并且文件在该电脑上(来源),您需要以 UNC 格式指定目的地:
Copy-Item -Path 'C:\SourceFolder\TheFileToCopy.txt' -Destination '\\srv1\c$\DestinationFolder'
但是,如果文件在远程机器上并且您需要将该文件复制到您登录的机器,那么<strong>源应该是 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
上的路径。
从您的评论中,我看到 source 是 C:\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 中创建该文件夹:< /p>
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$
,而无需一直通过管理共享。
希望这能解释更多