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