web-dev-qa-db-ja.com

PowerShellはxcopy、robocopy、またはcopy-itemを使用します

バッチファイルからPowerShellスクリプトに切り替える理由は、プロセスのエラーチェックを改善するためです。コピー用のコマンドレットには、この点で利点がありますか?

Xcopyを使用してファイル名ごとにファイルを個別にコピーするバッチファイルが既に存在する場合、構文をcopy-itemに変換する利点はありますか?

Robocopy、xcopy、copy-itemを使用する利点は何ですか(互いに比較して)?たとえば、信頼性の高いネットワークを介して多数の小さなファイルを操作する場合、robocopyには利点がありますか。このスクリプトを数百のコンピュータで同時に実行して、数百のファイルを各コンピュータにコピーする場合、決定に影響しますか?決定は主にファイルの権限に焦点を当てるべきですか?

15
Adam

主な利点は、文字列やファイル指定の代わりにパイプを介してオブジェクトをCopy-Itemに送信できることです。だからあなたはできる:

Get-ChildItem '\\fileserver\photos\*.jpeg' -File | `
  Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | `
  Copy-Item -Destination '\\webserver\photos\'

これは良い例ではありませんが(Copy-Item -Filterでそれを行うことができます)、オンザフライで簡単に思いつくことはできます。ファイルを操作してGet-ChildItemからのパイプラインを作成することはよくありますが、私は個人的には-Recurse -IncludeRemove-Itemのバグのため、多くの場合それを行う傾向があります。

また、PowerShellのエラートラップ、-Passthru-WhatIf-UseTransactionなどの特別なパラメーター、およびすべての一般的なパラメーターも取得します。 Copy-Item -Recurseは、xcopyのツリーコピー機能の一部をレプリケートできますが、それはかなり基本的なものです。

ここで、ACL、所有権、監査などを維持する必要がある場合、xcopyまたはrobocopyは、その機能が組み込まれているため、おそらくはるかに簡単になります。暗号化されたファイルを暗号化されていない場所にコピーするCopy-Itemの処理方法(xcopyにはこれを実行する機能があります)。Copy-Itemがアーカイブ属性の直接管理をサポートしているとは思いません。

それがあなたが探しているスピードなら、私はxcopyとrobocopyが勝つと思います。マネージコードは一般にオーバーヘッドが高くなります。 Xcopyとrobocopyは、ネットワークとの連携をより詳細に制御できます。

9
Bacon Bits