我有2个文件夹:
$srcPath = \\stagingserver
$destPath = \\productionserver
我想比较两者以确定$ src文件夹中的更改比尚未推送到生产中的更改。该项目是100个目录中的约4000个文件,总计约80mb。我正在进行哈希比较,如下所示:
$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分钟。我接受它是因为它需要在本地复制所有内容以执行哈希。我怎么能更快地做到这一点?有没有办法维护服务器上每个文件的哈希值?我应该远程执行脚本吗?
答案 0 :(得分:0)
您可以使用robocopy
将暂存共享内容同步到生产共享中,而不是比较文件。 /MIR
标志可用于镜像,即从目标中删除不存在的文件。 Robocopy使用时间戳来确定是否需要复制文件,因此有一些警告。
如果需要哈希,您可以在远程服务器上创建一个脚本,该脚本将文件哈希值存储在CSV文件中。之后,导入CSV文件并将本地哈希与文件内容进行比较应该很容易。