Вопрос

Я пишу скрипт для 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 (...)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top