Untitled

 avatar
unknown
plain_text
21 days ago
3.9 kB
4
Indexable
# Define arrays of source and destination folders (must be in same order)
$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 file names and count
function Compare-FolderContent {
    param(
        [string]$SourcePath,
        [string]$DestinationPath
    )

    $Differences = @()

    # Get all file full paths and map to relative paths
    $SourceFileMap = @{}
    Get-ChildItem -Path $SourcePath -Recurse -File | ForEach-Object {
        $relative = $_.FullName.Replace($SourcePath, "")
        $SourceFileMap[$relative] = $_.FullName
    }

    $DestinationFileMap = @{}
    Get-ChildItem -Path $DestinationPath -Recurse -File | ForEach-Object {
        $relative = $_.FullName.Replace($DestinationPath, "")
        $DestinationFileMap[$relative] = $_.FullName
    }

    $SourceFiles = $SourceFileMap.Keys
    $DestinationFiles = $DestinationFileMap.Keys

    $OnlyInSource = Compare-Object -ReferenceObject $SourceFiles -DifferenceObject $DestinationFiles -PassThru | Where-Object { $_ -in $SourceFiles }
    $OnlyInDestination = Compare-Object -ReferenceObject $SourceFiles -DifferenceObject $DestinationFiles -PassThru | Where-Object { $_ -in $DestinationFiles }

    if ($OnlyInSource.Count -gt 0) {
        $Differences += "Files only in source:"
        $Differences += $OnlyInSource | ForEach-Object { $SourceFileMap[$_] }
    }

    if ($OnlyInDestination.Count -gt 0) {
        $Differences += "Files only in destination:"
        $Differences += $OnlyInDestination | ForEach-Object { $DestinationFileMap[$_] }
    }

    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-FolderContent -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