Frage

Ich bin ein Skript für MS Powershell zu schreiben. Dieses Skript verwendet den Copy-Item Befehl. Eines der optionalen Argumente für diesen Befehl ist „-container“. Die Dokumentation für das Argument besagt, dass dieses Argument die Angabe „Containerobjekte während des Kopiervorgangs Behält.“

Das ist alles schön und gut, denn ich die letzte Person sein würde, bei einem Kopiervorgang nicht konservierte Containerobjekte wollen. Aber im Ernst, was macht dieses Argument? Insbesondere in dem Fall, wo ich von einem Ort zum anderen ein Plattenverzeichnisbaum kopiere, was für einen Unterschied dies auf das Verhalten des Copy-Item Befehl macht?

War es hilfreich?

Lösung

Der Behälter der Dokumentation spricht, ist die Ordnerstruktur. Wenn Sie eine rekursive Kopie tun und wollen die Ordnerstruktur erhalten, würden Sie den -container Schalter verwenden. (Anmerkung:.. Standardmäßig die -container Schalter auf true gesetzt, so dass Sie würde es wirklich nicht angeben müssen, wenn Sie wollte es deaktivieren Sie -container: $false verwenden könnte)

Es gibt einen Haken an dieser ... wenn Sie ein Verzeichnis und Rohr tun it-Artikel zu kopieren, wird es nicht die Ordnerstruktur erhalten. Wenn Sie die Ordnerstruktur beibehalten möchten, müssen Sie die -path-Eigenschaft und die -recurse Schalter angeben.

Andere Tipps

Ich fand auch die Dokumentation weniger als hilfreich. Ich habe einige Tests, um zu sehen, wie die -Container Parameter in Verbindung mit -Recurse funktionieren, wenn Dateien und Ordner zu kopieren.

Beachten Sie, dass -Container bedeutet -Container: $true.

Dies ist die Dateistruktur I für die Beispiele verwendet:

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • Für alle Beispiele, die aktuelle Position (PWD) ist X:\.
  • I verwendet Powershell 4.0.

1) So kopieren Sie einfach den Quellordner (leere Ordner):

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

Es folgt ein Fehler:

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) Um die gesamte Ordnerstruktur mit Dateien zu kopieren:

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) alle Nachkommen (Dateien und Ordner kopieren) in einem einzigen Ordner:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top