6

У меня есть скрипт 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

Я нашел обходной путь, который заключается в создании New-Item [directory 1] в [path 2], создающем корень, в котором Copy-Item будет заполняться содержимым, но это вызывает другую проблему, когда Copy-Item жалуется, что путь уже существует несмотря на то, что копия файла действительно удалась. Copy-Item рекламируется как своего рода решение "просто работает". Я не вижу причин для того, чтобы мой обходной путь был необходим. Какая часть документации указывает на обратное? Почему это происходит? Как лучше всего решить мою проблему?

1 ответ1

7

Основной причиной вашей проблемы является то, что пункт назначения не существует. Если вы посмотрите вверх по течению в своем журнале ошибок, вы увидите это сообщение. Вам необходимо создать папку назначения:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .