Подтвердить что ты не робот

В чем смысл аргумента Powershell Copy-Item -container?

Я пишу script для MS PowerShell. Этот script использует команду Copy-Item. Одним из необязательных аргументов этой команды является "-контейнер". В документации для аргумента указано, что указание этого аргумента "Сохраняет контейнерные объекты во время операции копирования".

Это все хорошо и хорошо, потому что я был бы последним человеком, который хотел бы иметь неконсервированные контейнерные объекты во время операции копирования. Но во всей серьезности, что делает этот аргумент? В частности, в том случае, когда я копирую дерево дискового каталога из одного места в другое, какая разница делает это с поведением команды Copy-Item?

4b9b3361

Ответ 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 (...)