web-dev-qa-db-ja.com

Powershell Copy-Item -container引数の意味は何ですか?

MSPowerShell用のスクリプトを書いています。このスクリプトは、Copy-Itemコマンドを使用します。このコマンドのオプションの引数の1つは、「-container」です。引数のドキュメントには、この引数を指定すると「コピー操作中にコンテナオブジェクトが保持される」と記載されています。

コピー操作中に保存されていないコンテナオブジェクトが必要になるのは私が最後になるため、これはすべてうまくいきます。しかし、すべての深刻さにおいて、この議論は何をしますか?特に、ディスクディレクトリツリーをある場所から別の場所にコピーする場合、これはCopy-Itemコマンドの動作にどのような違いをもたらしますか?

40
Mark Meuer

ドキュメントが話しているコンテナはフォルダ構造です。再帰コピーを実行していて、フォルダー構造を保持したい場合は、-containerスイッチを使用します。 (注:デフォルトでは、-containerスイッチはtrueに設定されているため、実際に指定する必要はありません。オフにする場合は、-container: $falseを使用できます。)

これには落とし穴があります...ディレクトリリストを作成してCopy-Itemにパイプすると、フォルダ構造は保持されません。フォルダ構造を保持したい場合は、-pathプロパティと-recurseスイッチを指定する必要があります。

29
Steven Murawski

私もドキュメントが役に立たなかったと思いました。ファイルやフォルダーをコピーするときに、-Containerパラメーターが-Recurseとどのように連携するかを確認するためにいくつかのテストを行いました。

-Container-Container: $trueを意味することに注意してください。

これは、例で使用したファイル構造です。

#    X:.
#    ├───destination
#    └───source
#        │   source.1.txt
#        │   source.2.txt
#        │
#        └───source.1
#                source.1.1.txt
  • すべての例で、現在の場所(pwd)はX:\です。
  • PowerShell4.0を使用しました。

1)ソースフォルダ(空のフォルダ)のみをコピーするには:

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

以下はエラーになります:

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)フォルダ構造全体をファイルとともにコピーするには:

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)すべての子孫(ファイルとフォルダー)を単一のフォルダーにコピーするには:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false
#    X:.
#    ├───destination
#    │   │   source.1.1.txt
#    │   │   source.1.txt
#    │   │   source.2.txt
#    │   │
#    │   └───source.1
#    └───source (...)
68
bouvierr