Quelle est la signification de l'argument Powershell Copy-Item -container?
-
02-07-2019 - |
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
?
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 (...)