Untitled

 avatar
unknown
plain_text
21 days ago
3.2 kB
5
Indexable
$SourceFolders = @(
    "\\ServerA\Folder1",
    "\\ServerA\Folder2",
    "\\ServerA\Folder3",
    "\\ServerA\Folder4",
    "\\ServerA\Folder5",
    "\\ServerA\Folder6",
    "\\ServerA\Folder7",
    "\\ServerA\Folder8",
    "\\ServerA\Folder9",
    "\\ServerA\Folder10",
    "\\ServerA\Folder11",
    "\\ServerA\Folder12",
    "\\ServerA\Folder13",
    "\\ServerA\Folder14",
    "\\ServerA\Folder15",
    "\\ServerA\Folder16",
    "\\ServerA\Folder17",
    "\\ServerA\Folder18",
    "\\ServerA\Folder19",
    "\\ServerA\Folder20"
)

$DestinationFolders = @(
    "\\ServerB\Folder1",
    "\\ServerB\Folder2",
    "\\ServerB\Folder3",
    "\\ServerB\Folder4",
    "\\ServerB\Folder5",
    "\\ServerB\Folder6",
    "\\ServerB\Folder7",
    "\\ServerB\Folder8",
    "\\ServerB\Folder9",
    "\\ServerB\Folder10",
    "\\ServerB\Folder11",
    "\\ServerB\Folder12",
    "\\ServerB\Folder13",
    "\\ServerB\Folder14",
    "\\ServerB\Folder15",
    "\\ServerB\Folder16",
    "\\ServerB\Folder17",
    "\\ServerB\Folder18",
    "\\ServerB\Folder19",
    "\\ServerB\Folder20"
)

# Ensure both arrays have the same length
if ($SourceFolders.Count -ne $DestinationFolders.Count) {
    Write-Error "The number of source and destination folders must be the same."
    exit
}

$OverallDifferences = @()

# Function to compare a pair of folders
function Compare-Folders {
    param(
        [string]$SourcePath,
        [string]$DestinationPath
    )

    $Differences = @()

    # Compare Source -> Destination
    $Output1 = robocopy $SourcePath $DestinationPath /L /E /NJH /NJS /NP /TS /FP | Out-String
    # Compare Destination -> Source
    $Output2 = robocopy $DestinationPath $SourcePath /L /E /NJH /NJS /NP /TS /FP | Out-String

    function Parse-RobocopyOutput {
        param([string[]]$Lines, [string]$Direction)
        foreach ($Line in $Lines) {
            if ($Line -match "\\\\") {
                $Differences += "$Direction: $Line"
            }
        }
    }

    Parse-RobocopyOutput -Lines ($Output1 -split "`r?`n") -Direction "Only in Source"
    Parse-RobocopyOutput -Lines ($Output2 -split "`r?`n") -Direction "Only in Destination"

    return $Differences
}

# Loop through folder pairs
for ($i = 0; $i -lt $SourceFolders.Count; $i++) {
    Write-Host "Comparing: $($SourceFolders[$i]) <-> $($DestinationFolders[$i])" -ForegroundColor Cyan
    $Diffs = Compare-Folders -SourcePath $SourceFolders[$i] -DestinationPath $DestinationFolders[$i]

    if ($Diffs.Count -eq 0) {
        Write-Host "Folders are identical." -ForegroundColor Green
    } else {
        Write-Host "Differences found:" -ForegroundColor Red
        $Diffs | ForEach-Object { Write-Host $_ }
        $OverallDifferences += "==== $($SourceFolders[$i]) vs $($DestinationFolders[$i]) ===="
        $OverallDifferences += $Diffs
    }
}

# Final summary
if ($OverallDifferences.Count -eq 0) {
    Write-Host "All folder pairs are identical." -ForegroundColor Green
} else {
    Write-Host "Summary of differences:" -ForegroundColor Yellow
    $OverallDifferences | ForEach-Object { Write-Host $_ }
}
Editor is loading...
Leave a Comment