Windows actually includes a powerful but often overlooked tool called bitsadmin
(Background Intelligent Transfer Service). While its syntax isn't as elegant as wget/curl, it gets the job done for basic downloads:
bitsadmin /transfer myDownloadJob /download /priority normal http://example.com/file.zip C:\Downloads\file.zip
For Windows 7 SP1+ and Windows 10/11, PowerShell provides robust download capabilities:
# Basic download
Invoke-WebRequest -Uri "http://example.com/file.zip" -OutFile "C:\Downloads\file.zip"
# With progress display
(New-Object System.Net.WebClient).DownloadFile("http://example.com/largefile.iso","C:\Downloads\largefile.iso")
Originally designed for certificate management, certutil
can surprisingly handle HTTP downloads:
certutil -urlcache -split -f http://example.com/installer.exe installer.exe
Note: This creates a cache entry that you might want to clean up afterward with:
certutil -urlcache * delete
For complex scenarios (headers, authentication, etc.), PowerShell becomes more capable:
$headers = @{
"Authorization" = "Bearer token123"
"User-Agent" = "MyDownloadScript/1.0"
}
Invoke-WebRequest -Uri "https://api.example.com/data" -Headers $headers -OutFile "data.json"
Here's how to implement a simple download script in a .bat file using PowerShell:
@echo off
set URL=http://example.com/update.zip
set DEST=C:\Updates\patch.zip
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('%URL%', '%DEST%')"
Many developers transitioning from Linux/Unix environments ask whether Windows provides native command-line download utilities comparable to wget or curl. The requirement becomes critical when automating processes while minimizing third-party dependencies.
While Windows doesn't include direct equivalents, these native tools can handle HTTP/S downloads:
1. bitsadmin (Background Intelligent Transfer Service)
The legacy tool for queued downloads with resume capability:
bitsadmin /transfer myDownloadJob /download /priority normal https://example.com/file.zip C:\Downloads\file.zip
2. certutil (Certificate Utility)
Originally for certificate management but useful for simple downloads:
certutil -URLcache -split -f https://example.com/script.ps1 script.ps1
3. PowerShell's Invoke-WebRequest
The most robust modern solution (Windows 7+):
Invoke-WebRequest -Uri "https://example.com/package.tar.gz" -OutFile "C:\temp\package.tar.gz"
Advanced usage with headers:
$headers = @{ "Authorization" = "Bearer token123" "User-Agent" = "MyAutomationScript/1.0" } Invoke-WebRequest -Uri $url -Headers $headers -OutFile $output
Proxy Support: All methods honor system proxy settings by default
HTTPS: Certutil may require -f
flag to bypass certificate checks
Progress Tracking: PowerShell 5.1+ shows progress bars automatically
For complex scenarios requiring cookie handling, proper redirect following, or REST API interactions, consider these workarounds:
# PowerShell wrapper for advanced functionality function Get-WebResource { param( [string]$Url, [string]$OutputPath, [hashtable]$Headers = @{} ) try { $ProgressPreference = 'SilentlyContinue' $response = Invoke-WebRequest -Uri $Url -Headers $Headers -UseBasicParsing [System.IO.File]::WriteAllBytes($OutputPath, $response.Content) return $true } catch { Write-Error "Download failed: $_" return $false } }
- Windows 7: Requires PowerShell 3.0+ for Invoke-WebRequest
- Windows 10 1709+: curl.exe alias included (actual curl binary)
- Windows Server Core: All methods available except GUI-based bitsadmin frontend