You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:PowerShell实现多服务器目录同步校验

多台服务器目录同步对比解决方案

嘿,作为PowerShell新手完全不用不好意思呀!我看你已经迈出了第一步,现在帮你把这个目录同步检查的脚本补全并优化,让它能准确对比多台服务器和源服务器的目录内容~

先梳理下你现有代码的小问题

你之前的$code_src01变量没有指定服务器,PowerShell会默认读取本地的E$\appdirectory,这可不是你要的源服务器目录哦!得把服务器名和路径拼接成远程共享的格式才行。

完整实用的脚本示例

这个脚本会帮你:

  • 从servers.txt读取服务器列表,把第一台设为源服务器
  • 获取源服务器所有文件的哈希值(确保内容完全一致)
  • 逐个对比其他服务器的目录,找出缺失文件、多余文件、内容不一致的文件
# 读取服务器列表文件
$servers = Get-Content ./servers.txt
# 将列表第一台服务器设为源服务器
$sourceServer = $servers[0]
# 拼接源服务器的远程目录路径(注意格式:\\服务器名\共享目录)
$sourceDirectory = "\\$sourceServer\E$\appdirectory"

# 获取源服务器所有文件的关键信息:相对路径、哈希值、修改时间
$sourceFileInfo = Get-ChildItem -Recurse -Path $sourceDirectory -File | ForEach-Object {
    [PSCustomObject]@{
        RelativePath = $_.FullName.Replace($sourceDirectory, "")  # 用相对路径统一对比标准
        FileHash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
        LastModified = $_.LastWriteTime
    }
}

# 遍历所有目标服务器进行对比
foreach ($targetServer in $servers | Where-Object { $_ -ne $sourceServer }) {
    Write-Host "`n=== 正在对比服务器: $targetServer ===" -ForegroundColor Cyan
    $targetDirectory = "\\$targetServer\E$\appdirectory"

    # 先检查目标服务器的目录是否存在
    if (-not (Test-Path $targetDirectory)) {
        Write-Host "❌ 错误:服务器 $targetServer 的目标目录不存在!" -ForegroundColor Red
        continue
    }

    # 获取目标服务器的文件信息
    $targetFileInfo = Get-ChildItem -Recurse -Path $targetDirectory -File | ForEach-Object {
        [PSCustomObject]@{
            RelativePath = $_.FullName.Replace($targetDirectory, "")
            FileHash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
            LastModified = $_.LastWriteTime
        }
    }

    # 1. 找出目标服务器缺失的文件
    $missingFiles = Compare-Object -ReferenceObject $sourceFileInfo -DifferenceObject $targetFileInfo -Property RelativePath | Where-Object { $_.SideIndicator -eq "<=" }
    if ($missingFiles) {
        Write-Host "⚠️ 缺失文件:" -ForegroundColor Red
        $missingFiles | Select-Object -ExpandProperty RelativePath | ForEach-Object { Write-Host "  - $_" }
    }

    # 2. 找出目标服务器多余的文件
    $extraFiles = Compare-Object -ReferenceObject $sourceFileInfo -DifferenceObject $targetFileInfo -Property RelativePath | Where-Object { $_.SideIndicator -eq "=>" }
    if ($extraFiles) {
        Write-Host "⚠️ 多余文件:" -ForegroundColor Yellow
        $extraFiles | Select-Object -ExpandProperty RelativePath | ForEach-Object { Write-Host "  - $_" }
    }

    # 3. 找出内容不一致的文件(哈希值不同)
    $mismatchedFiles = Compare-Object -ReferenceObject $sourceFileInfo -DifferenceObject $targetFileInfo -Property RelativePath, FileHash | Where-Object { $_.SideIndicator -ne "==" }
    if ($mismatchedFiles) {
        Write-Host "❌ 内容不一致文件:" -ForegroundColor Red
        $mismatchedFiles | Select-Object -ExpandProperty RelativePath | Get-Unique | ForEach-Object { Write-Host "  - $_" }
    }

    # 如果没有任何问题
    if (-not $missingFiles -and -not $extraFiles -and -not $mismatchedFiles) {
        Write-Host "✅ 服务器 $targetServer 与源服务器目录完全同步!" -ForegroundColor Green
    }
}

给新手的小提示

  • 运行脚本前,确保你有所有服务器E$\appdirectory共享目录的访问权限,不然会弹出权限错误哦
  • 如果服务器数量多或者文件很大,哈希计算会慢一点,别着急,等它跑完就行
  • 要是觉得SHA256算法太慢,也可以改成MD5(把脚本里的SHA256换成MD5),不过SHA256的校验更准确

内容的提问来源于stack exchange,提问作者JBerto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:35:55