45 lines
1.4 KiB
PowerShell
45 lines
1.4 KiB
PowerShell
#requires -Version 5.1
|
|
<#
|
|
.SYNOPSIS
|
|
Runs imapsync (via the upstream gilleslamiral/imapsync image) for every account
|
|
in a migration accounts.csv, copying mail from docker-mailserver to Stalwart.
|
|
#>
|
|
param(
|
|
[Parameter(Mandatory = $true)][string]$CsvPath,
|
|
[Parameter(Mandatory = $true)][string]$SourceHost,
|
|
[Parameter(Mandatory = $true)][string]$DestHost,
|
|
[int]$SourcePort = 993,
|
|
[int]$DestPort = 993,
|
|
[switch]$DryRun
|
|
)
|
|
|
|
$rows = Import-Csv -Path $CsvPath
|
|
|
|
$missing = $rows | Where-Object { -not $_.old_password -or -not $_.new_password }
|
|
if ($missing) {
|
|
throw "accounts.csv has $($missing.Count) row(s) missing old_password or new_password. Fill them in before syncing."
|
|
}
|
|
|
|
foreach ($row in $rows) {
|
|
Write-Host "==> Syncing $($row.email)"
|
|
|
|
$dockerArgs = @(
|
|
"run", "--rm", "gilleslamiral/imapsync", "imapsync",
|
|
"--host1", $SourceHost, "--port1", $SourcePort, "--ssl1",
|
|
"--user1", $row.email, "--password1", $row.old_password,
|
|
"--host2", $DestHost, "--port2", $DestPort, "--ssl2",
|
|
"--user2", $row.email, "--password2", $row.new_password,
|
|
"--automap", "--syncinternaldates", "--skipcrossduplicates",
|
|
"--no-modulesversion"
|
|
)
|
|
|
|
if ($DryRun) {
|
|
$dockerArgs += "--dry"
|
|
}
|
|
|
|
docker @dockerArgs
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Warning "imapsync exited with code $LASTEXITCODE for $($row.email)"
|
|
}
|
|
}
|