Invoke-WebRequest pushes every buffer through the pipeline and is the slowest of the three by a wide margin; curl.exe ships in System32 on every supported Windows and resumes a partial file with -C -, which matters on a 166 MB download that gets interrupted. Also checks the finished file against Content-Length, because a truncated MSI fails in msiexec with an error that says nothing about why. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>