Qual é o significado do argumento -container Powershell Copy-Item?
-
02-07-2019 - |
Pergunta
Eu estou escrevendo um script para MS PowerShell. Este script usa o comando Copy-Item
. Um dos argumentos opcionais para este comando é "-container
". A documentação para os estados argumento que especificar este argumento "objetos de recipiente conservas durante a operação de cópia."
Esta é tudo muito bem, porque eu seria a última pessoa a querer objetos de recipiente não preservadas durante uma operação de cópia. Mas com toda a seriedade, o que esse argumento faz? Particularmente no caso onde eu estou copiando uma árvore de diretórios do disco de um lugar para outro, que diferença isso faz para o comportamento do comando Copy-Item
?
Solução
O recipiente a documentação está falando é a estrutura da pasta. Se você estiver fazendo uma cópia recursiva e quer preservar a estrutura de pastas, você usaria o interruptor -container. (Nota:.. Por padrão o interruptor -container é definido como verdadeiro, então você realmente não precisa especificá-lo Se você queria desligá-lo você poderia usar -container: $false
)
Há um prendedor para isso ... se você fizer uma listagem de diretório e canalizá-lo para Copy-Item, ele não vai preservar a estrutura da pasta. Se você quiser preservar a estrutura de pastas, você tem que especificar a propriedade -caminho eo interruptor -recurse.
Outras dicas
Eu também encontrei a documentação menos do que útil. Eu fiz alguns testes para ver como o parâmetro -Container
trabalha em conjunto com -Recurse
ao copiar arquivos e pastas.
Note que isso significa -Container
-Container: $true
.
Esta é a estrutura do arquivo que eu usei para os exemplos:
# X:.
# ├───destination
# └───source
# │ source.1.txt
# │ source.2.txt
# │
# └───source.1
# source.1.1.txt
- Para todos os exemplos, a localização atual (pwd) é
X:\
. - Eu costumava PowerShell 4.0.
1) Para copiar apenas a pasta de origem (pasta vazia):
Copy-Item -Path source -Destination .\destination
Copy-Item -Path source -Destination .\destination -Container
# X:.
# ├───destination
# │ └───source
# └───source (...)
A seguir dá um erro:
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) Para copiar toda a estrutura de pastas com arquivos:
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) Para copiar todos os descendentes (arquivos e pastas) em uma única pasta:
Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
# X:.
# ├───destination
# │ │ source.1.1.txt
# │ │ source.1.txt
# │ │ source.2.txt
# │ │
# │ └───source.1
# └───source (...)