0

私は2つのフォルダを持っています:

$srcPath = \\stagingserver
$destPath = \\productionserver

この 2 つを比較して、$src フォルダーにある変更のうち、まだ本番環境にプッシュされていないものを特定したいと思います。プロジェクトは、合計 80 MB の 100 ディレクトリを超える ~ 4000 ファイルです。現在、次のようにハッシュ比較を行っています。

$src = Get-ChildItem $srcPath -Recurse
$dest = Get-ChildItem $destPath -Recurse 
$same = Compare-Object $src $dest -Property Name, Length, LastWriteTime -passthru -includeequal -excludeDifferent

$srcTree = Get-ChildItem $src -Recurse -exclude $same | Where-Object {!$_.psiscontainer } | get-hash
$destTree = Get-ChildItem $dest -Recurse -exclude $same | Where-Object {!$_.psiscontainer } | get-hash  

$diff = Compare-Object -ReferenceObject $srcTree -differenceObject $destTree | ? {$_.SideIndicator -eq "<=" } | % {$_.InputObject.Path}

所要時間は約 5 分です。ハッシュを実行するには、すべてをローカルにコピーする必要があるためです。どうすればこれをより速く行うことができますか? サーバー上のすべてのファイルのハッシュ値を維持する方法はありますか? スクリプトをリモートで実行する必要がありますか?

4

1 に答える 1

0

robocopyファイルを比較する代わりに、ステージング共有の内容を本番共有に同期するために使用できます。/MIRフラグを使用してミラーリングできます。つまり、存在しないファイルを宛先から削除できます。Robocopyはタイムスタンプを使用してファイルをコピーする必要があるかどうかを判断するため、いくつかの注意点があります。

ハッシュが必要な場合は、ファイルハッシュをCSVファイルに保存するスクリプトをリモートサーバー上に作成できます。その後、CSVファイルをインポートし、ローカルハッシュをファイルの内容と比較するのは簡単です。

于 2012-08-29T11:41:01.357 に答える