В чем смысл аргумента Powershell Copy-Item -container?
-
02-07-2019 - |
Вопрос
Я пишу скрипт для MS PowerShell.Этот скрипт использует Copy-Item
команда.Одним из необязательных аргументов этой команды является «-container
".В документации по аргументу указано, что указание этого аргумента «сохраняет объекты контейнера во время операции копирования».
Это все хорошо, поскольку я был бы последним человеком, который хотел бы иметь несохраненные объекты-контейнеры во время операции копирования.Но если серьезно, что делает этот аргумент?В частности, в случае, когда я копирую дерево каталогов диска из одного места в другое, какое значение это имеет для поведения Copy-Item
команда?
Решение
Контейнер, о котором говорится в документации, представляет собой структуру папок.Если вы выполняете рекурсивное копирование и хотите сохранить структуру папок, вам следует использовать ключ -container.(Примечание:по умолчанию для параметра -container установлено значение true, поэтому вам не нужно его указывать.Если вы хотите отключить его, вы можете использовать -container: $false
.)
В этом есть подвох...если вы создадите список каталогов и перенаправите его в Copy-Item, структура папок не сохранится.Если вы хотите сохранить структуру папок, вам необходимо указать свойство -path и переключатель -recurse.
Другие советы
Я тоже нашел документацию менее чем полезной.Я провел несколько тестов, чтобы увидеть, как -Container
параметр работает совместно с -Recurse
при копировании файлов и папок.
Обратите внимание, что -Container
означает -Container: $true
.
Это файловая структура, которую я использовал для примеров:
# X:.
# ├───destination
# └───source
# │ source.1.txt
# │ source.2.txt
# │
# └───source.1
# source.1.1.txt
- Во всех примерах текущее местоположение (pwd) равно
X:\
. - Я использовал PowerShell 4.0.
1) Чтобы скопировать только исходную папку (пустую папку):
Copy-Item -Path source -Destination .\destination
Copy-Item -Path source -Destination .\destination -Container
# X:.
# ├───destination
# │ └───source
# └───source (...)
Следующее выдает ошибку:
Copy-Item -Path source -Destination .\destination -Container: $false
# Exception: Container cannot be copied to another container.
# The -Recurse or -Container parameter is not specified.
2) Чтобы скопировать всю структуру папок с файлами:
Copy-Item -Path source -Destination .\destination -Recurse
Copy-Item -Path source -Destination .\destination -Recurse -Container
# X:.
# ├───destination
# │ └───source
# │ │ source.1.txt
# │ │ source.2.txt
# │ │
# │ └───source.1
# │ source.1.1.txt
# └───source (...)
3) Чтобы скопировать всех потомков (файлы и папки) в одну папку:
Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
# X:.
# ├───destination
# │ │ source.1.1.txt
# │ │ source.1.txt
# │ │ source.2.txt
# │ │
# │ └───source.1
# └───source (...)