与Powershell进行远程目录比较的最佳方式

时间:2012-08-28 20:46:41

标签: powershell deployment scripting

我有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分钟。我接受它是因为它需要在本地复制所有内容以执行哈希。我怎么能更快地做到这一点?有没有办法维护服务器上每个文件的哈希值?我应该远程执行脚本吗?

1 个答案:

答案 0 :(得分:0)

您可以使用robocopy将暂存共享内容同步到生产共享中,而不是比较文件。 /MIR标志可用于镜像,即从目标中删除不存在的文件。 Robocopy使用时间戳来确定是否需要复制文件,因此有一些警告。

如果需要哈希,您可以在远程服务器上创建一个脚本,该脚本将文件哈希值存储在CSV文件中。之后,导入CSV文件并将本地哈希与文件内容进行比较应该很容易。