В чем смысл аргумента Powershell Copy-Item -container?
Я пишу script для MS PowerShell. Этот script использует команду Copy-Item. Одним из необязательных аргументов этой команды является "-контейнер". В документации для аргумента указано, что указание этого аргумента "Сохраняет контейнерные объекты во время операции копирования".
Это все хорошо и хорошо, потому что я был бы последним человеком, который хотел бы иметь неконсервированные контейнерные объекты во время операции копирования. Но во всей серьезности, что делает этот аргумент? В частности, в том случае, когда я копирую дерево дискового каталога из одного места в другое, какая разница делает это с поведением команды Copy-Item?
Ответы
Ответ 1
Контейнер, о котором идет речь в документации, - это структура папок. Если вы делаете рекурсивную копию и хотите сохранить структуру папок, вы должны использовать переключатель -container. (Примечание: по умолчанию переключатель -container имеет значение true, поэтому вам не нужно будет его указывать. Если вы хотите отключить его, вы можете использовать -container: $false
.)
Есть уловка для этого... если вы делаете список каталогов и пересылаете его в Copy-Item, он не сохранит структуру папок. Если вы хотите сохранить структуру папок, вы должны указать свойство -path и переключатель -recurse.
Ответ 2
Я тоже нашел документацию менее полезной. Я сделал несколько тестов, чтобы увидеть, как параметр -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 (...)