新手求助: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
相关产品推荐
相关产品推荐

