我有一个 Powershell 脚本,其中有一行如下所示:
Copy-Item \\[machine 1]\[path 1]\[directory 1]\ \\[machine 2]\[path 2]\ -recurse
当我的脚本执行到这一行时,出现以下错误:
Copy-Item : Container cannot be copied onto existing leaf item.
At C:\[script path]\[script name]:[line] char:5
+ Copy-Item \\[machine 1]\[path 1]\[directory 1]\ \\[machine 2] ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (\\[machine 1]\[path 1]\[directory 1]:String) [Copy-Item], PSArgumentException
+ FullyQualifiedErrorId : CopyContainerItemToLeafError,Microsoft.PowerShell.Commands.CopyItemCommand
我找到了一个解决方法,即在 [路径 2] 下新建 [目录 1],创建 Copy-Item 将用内容填充的根目录,但这会导致另一个问题,即 Copy-Item 抱怨路径已经存在,尽管文件复制实际上成功了。Copy-Item 被宣传为一种“有效”的解决方案。我认为我的解决方法没有必要。文档的哪一部分会表明不是这样?为什么会发生这种情况?我的问题的最佳解决方案是什么?
答案1
问题的根本原因是目标不存在。如果您查看错误日志中的上游,您将看到该消息。您需要创建目标文件夹:
if (-Not (Test-Path \\[machine 2]\[path 2]))
{
md -path \\[machine 2]\[path 2]
}
Copy-Item \\[machine 1]\[path 1]\[directory 1]\ \\[machine 2]\[path 2]\ -recurse