Replace fragile DIY scripts

PowerShell GAL sync script alternative

Stop maintaining brittle PowerShell scripts for Exchange Online contact sync. CYNC is a managed Windows Service with throttling, retries, and a real dashboard — all built in.

Five things every production sync script must handle

CYNC implements all of these once, correctly, for thousands of tenants.

Graph throttling

Honor Retry-After, exponential backoff, per-tenant budgets, batch request limits.

Delta sync

Persist /users/delta tokens correctly across runs to avoid full-tenant scans.

Cert rotation

Detect upcoming cert expiry, rotate without downtime, alert on failure.

Contact correlation

Match existing contacts using a stable ID — Open Extensions, not email matching.

Failure isolation

One bad mailbox shouldn't kill the run. Per-target try/catch with structured logging.

Observability

Real-time progress, alerting, audit trail — not just a console window scrolling by.

DIY script vs CYNC — head to head

Engineering Effort

AspectCYNCPowerShell script
Initial developmentInstall MSI — 15 min200–800 lines of PowerShell — days to weeks
TestingValidated against thousands of tenantsYou write and maintain test cases
Maintenance burdenAuto-updates via WiX MSIContinuous — script breaks on Graph SDK changes
On-call riskVendor-supportedYou are on-call when sync breaks at 3am
Knowledge siloDocumented productTribal knowledge — single point of failure if author leaves

Reliability & Throttling

AspectCYNCPowerShell script
Graph API throttlingAuto retry with exponential backoffYou implement Retry-After header handling
Token refreshMSAL with cert auth — built inManual ADAL/MSAL token caching code
Delta sync/users/delta — only changed usersFull enumeration every run (slow + costly)
Per-mailbox sync resilienceFailed mailbox doesn't stop runTry/catch around every API call
Concurrency controlTuned parallelism with backpressureSequential or naive parallelism
Circuit breaker on tenant errorsBuilt-inCustom logic required

Operations & Visibility

AspectCYNCPowerShell script
DashboardWinUI 3 desktop dashboardConsole output / log files
Sync historySQLite database with full auditWhatever you log to disk
Real-time progressgRPC streaming UITail a log file
Failure alertingWindows Event Log + dashboardCustom email/Teams webhook code
SchedulingCron-style scheduler in serviceTask Scheduler trigger
Multi-tenant managementSingle dashboardOne script per tenant typically

Security & Compliance

AspectCYNCPowerShell script
AuthenticationCertificate in Windows Cert StoreCert + manual cert rotation logic
Secrets managementNo secrets — cert auth onlyYou handle pfx files / secret rotation
Code signingAuthenticode-signed binariesUnsigned scripts (or you sign them)
Privilege modelService account, least privilegeOften runs under admin scheduled task
Audit trailTamper-evident SQLite logPlain text logs — easy to lose

Cost

AspectCYNCPowerShell script
Licensing€0.29/user/month (10 free)Free
Engineering time (loaded)0 hours/month5–20 hours/month for non-trivial setups
Outage costVendor-managed reliabilityMailbox-wide stale contacts, helpdesk tickets
Total cost at 500 users~€122/month + zero engineeringFree + €2,000+/month engineering loaded cost

FAQ

Why are PowerShell GAL sync scripts a problem?

DIY scripts work until they don't. The Graph SDK gets a breaking change, certificate expires, throttling rules tighten, a mailbox returns an unexpected error and breaks the loop, the engineer who wrote it leaves the company. Each is a one-off failure that costs hours of triage. CYNC turns sync into a product, not a project.

Isn't a script free? Why pay for CYNC?

The script license is free; the engineering hours are not. Even a minimal production script needs delta sync, throttling-aware retry, secret rotation, alerting, scheduling, monitoring, and incident response — easily 5–20 engineer-hours per month for non-trivial deployments. At loaded enterprise rates, CYNC pays for itself within the first 50 users.

What does a typical GAL sync script need to handle?

Microsoft Graph authentication with cert rotation, /users/delta token persistence, batch request construction, 429 Retry-After handling, exponential backoff, partial failure recovery, contact correlation across runs, photo download/upload streams, throttle budgets per tenant, and observability. CYNC implements all of this once, correctly, for thousands of tenants.

Can I migrate from my script gradually?

Yes. Install CYNC alongside your script in shadow mode. Use the dashboard to verify it produces the same contact set on a pilot mailbox group. Once you trust the output, disable the scheduled task and let CYNC own sync going forward. CYNC's Open Extension correlation handles existing contacts cleanly.

What about EWS Managed API scripts?

If your script uses EWS Managed API or the EWS PowerShell snap-in, retirement is even more urgent — Microsoft is removing EWS for many scenarios in October 2026. CYNC is 100% Microsoft Graph, future-proof.

Do I need to know PowerShell to operate CYNC?

No. CYNC has a WinUI 3 dashboard for configuration and monitoring. PowerShell is optional — useful for automation but never required for core sync operations.

Retire the script. Keep the sync.

10 users free per tenant — install in 15 minutes and run shadow-mode against your existing script.