Quelle est la signification de L'argument Copie-article-conteneur de Powershell?

j'écris un script pour Mme PowerShell. Ce script utilise le Copy-Item la commande. L'un des arguments de cette commande est "-container". La documentation pour l'argument indique que la spécification de cet argument "préserve les objets contenant pendant l'opération de copie."

tout cela est très bien, car je serais la dernière personne à vouloir des objets contenant non conservés pendant une opération de copie. Mais sérieusement, que fait cet argument? En particulier dans le cas là où je copie un arbre de répertoire de disque d'un endroit à un autre, quelle différence cela fait-il au comportement du Copy-Item commande?

26
demandé sur David Gardiner 2008-09-24 22:53:15

2 réponses

le conteneur dont parle la documentation est la structure du dossier. Si vous faites une copie récursive et que vous voulez préserver la structure du dossier, vous utiliserez le-container switch. (Note: par défaut le commutateur-container est défini à true, donc vous n'avez pas vraiment besoin de le spécifier. Si vous voulais l'éteindre vous pouvez utiliser -container: $false.)

Il y a un hic... si vous faites une liste de répertoires et que vous la pipez pour copier-Item, elle ne préservera pas la structure du dossier. Si vous voulez préserver la structure du dossier, vous devez spécifier la propriété-path et le commutateur-recurse.

24
répondu Steven Murawski 2013-09-20 19:29:49

moi aussi j'ai trouvé la documentation moins qu'utile. J'ai fait quelques tests pour voir comment l' -Container paramètre fonctionne en conjonction avec -Recurse lors de la copie de fichiers et de dossiers.

Notez que -Container signifie -Container: $true.

Voici la structure du fichier que j'ai utilisé pour les exemples:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • Pour tous les exemples, l'emplacement courant (pwd) est X:\.
  • J'ai utilisé PowerShell 4.0.

1) à copier juste le dossier source (dossier vide):

Copy-Item -Path source -Destination .\destination
Copy-Item -Path source -Destination .\destination -Container
#    X:.
#    ├───destination
#    │   └───source
#    └───source (...)

La suite donne une erreur:

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) pour copier toute la structure du dossier avec des fichiers:

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) Pour copier tous les descendants (fichiers et dossiers) dans un seul dossier:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)
46
répondu bouvierr 2016-08-27 15:24:46