私はハッシュベースのアプローチでそれを行い、おそらくデータベーステーブルを使用して自分自身を助けます。ところで、PSCXには、Get-Hash
これを行うのに役立つコマンドレットがあります。
基本的な考え方
各サーバーの目的のフォルダー ツリーをトラバースし (ネットワーク共有ではなく、パフォーマンス上の理由から関係するサーバーでこれを実行する必要があります)、見つけた各ファイルのハッシュを生成します。ハッシュとフル パスとサーバー名をどこかに保存します。できれば、4 つのサーバーすべてからアクセスできるデータベース テーブルに保存してください。これにより、処理がはるかに簡単になります。
次に、データベース テーブルを使用したことがある場合は、いくつかの簡単なクエリを記述します。
- ハッシュのインスタンスが 4 つ未満のハッシュを見つけます。
- ハッシュが異なるファイル パスを検索します (パス文字列を処理して、サーバーごとに同じ相対ルートに到達させる必要がある場合があります) (ただし、これは上記の 1. でカバーされる場合があります)。
もちろん、これらはすべて PS 内から実行できます。
このやり方が役立つ理由
- 4 方向の Compare-Object を実行する必要はありません。ハッシュは比較のポイントとして機能します。
- ハッシュを生成する Powershell コードは、各サーバーで実行される 1 つの同一の関数です。
- それはスケーリングします。100 個のフォルダーに対してこれを簡単に行うことができます。
- つまり、関連するサーバーにアクセスできるデータベーステーブルなど、簡単に操作および「配布」できるものになります。
欠点
PSCX Get-Hash はあまり高速ではありません。これは、PSにこの md5sums などの高速なハッシュ生成コマンドを発行させることで簡単に解決できます。
データベース テーブルを使用しない方法
1. ハッシュのフォルダーを処理しているときに、ハッシュ、ファイル パス、サーバー名を各サーバーのファイルに書き込み、完了したらそれらのファイルを元に戻します。
2. ハッシュコードをキーにして各ハッシュコードをカウントするハッシュテーブルにファイルを処理します。3. 各ハッシュ コードをキーにして、そのハッシュ コードのパス/サーバーの配列を作成する並列ハッシュ テーブルを作成できます (2. 結果ファイルを通過するときに同時に構築されます)。
4. ハッシュ テーブル 1 でカウントが 4 未満のハッシュ コードを探します。並列ハッシュ テーブル 2 を使用して、カウントが 4 未満のハッシュ コードを検索し、ファイル パスとサーバーが何であるかを調べます。そうだった。