Compare-Object
非常に機能が軽いコマンドレットです。それはいくつかの深刻な改善に耐えることができます. Name
これを機能させる最善の方法は、削除/追加されたファイルを別のバケットに分割し、 notFullName
を使用して同じファイルを比較することでしたSyncWindow
。
$removed = Compare-Object -ReferenceObject $oldFiles -DifferenceObject $newFiles -Property Name -PassThru | Where {$_.SideIndicator -eq '<='}
$added = Compare-Object -ReferenceObject $oldFiles -DifferenceObject $newFiles -Property Name -PassThru | Where {$_.SideIndicator -eq '=>'}
$removedNames = $removed | Foreach {$_.Fullname}
$same = $oldFiles | Where {$_.Fullname -notin $removedNames}
Compare-Object -ReferenceObject $same -DifferenceObject $newFiles -Property Name,Length,LastWriteTime -SyncWindow 1
これにより、次のような結果が得られました。
Name Length LastWriteTime SideIndicator
---- ------ ------------- -------------
AssemblyInfo.Shared.cs 340 8/28/2012 1:21:53 AM =>
AssemblyInfo.Shared.cs 340 8/28/2012 1:21:28 AM <=
EchoArgs.cs 825 8/28/2012 1:21:54 AM =>
EchoArgs.cs 825 8/28/2012 1:21:30 AM <=
AssemblyInfo.cs 151 8/28/2012 1:21:54 AM =>
AssemblyInfo.cs 151 8/28/2012 1:21:31 AM <=
それでも、リストの途中でファイルが同期しなくなります。図に行きます。SyncWindow パラメーターを削除しても、「正しい」結果が得られます。ファイルが散らばっていて、上下に並んでいないだけです。:-(