Question

J'écris un script pour MS PowerShell. Ce script utilise la commande Copy-Item . L'un des arguments facultatifs de cette commande est " -container ". La documentation de l'argument indique que spécifier cet argument "Conserve les objets conteneur lors de l'opération de copie".

C’est très bien, car je serais la dernière personne à vouloir des objets conteneurs non conservés lors d’une opération de copie. Mais, au sérieux, à quoi sert cet argument? En particulier dans le cas où je copie une arborescence de répertoires de disques d’un endroit à un autre, quelle différence cela fait-il avec le comportement de la commande Copy-Item ?

Était-ce utile?

La solution

Le conteneur dont parle la documentation est la structure des dossiers. Si vous effectuez une copie récursive et souhaitez conserver la structure de dossiers, utilisez le commutateur -container. (Remarque: par défaut, l'option -container est définie sur true. Vous n'avez donc pas besoin de l'indiquer. Si vous souhaitez le désactiver, vous pouvez utiliser -container: $ false .)

Il y a un problème à cela ... si vous faites une liste de répertoires et que vous les dirigez vers Copy-Item, la structure de dossiers ne sera pas préservée. Si vous souhaitez conserver la structure du dossier, vous devez spécifier la propriété -path et le commutateur -recurse.

Autres conseils

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

Notez que -Container signifie -Container: $ true .

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

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

1) Pour copier uniquement le dossier source (dossier vide):

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

Ce qui suit 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 la structure de dossiers complète 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 (...)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top