Compare-Object
是一个功能非常简单的 cmdlet。它可以承受一些严重的改进。我可以让它工作的最好方法是将删除/添加的文件拼凑到一个单独的存储桶中,然后使用Name
notFullName
与SyncWindow
1 比较相同的文件,例如:
$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 参数,您仍然会得到“正确”的结果,只是文件分散在其他地方,而不是一个接一个地排列。:-(