TLDR answers*:
Method 1 (good for most cases), by default synchronous**
Invoke-WebRequest $url -OutFile $path_to_file
If you get error "...Could not create SSL/TLS secure channel" see Powershell Invoke-WebRequest Fails with SSL/TLS Secure Channel
Method 2 (for JSON/XML data), by default synchronous**
Invoke-RestMethod $url -OutFile $path_to_file
This is a wrapper around Invoke-WebRequest, with some additional formatting for JSON results. (See documentation here and here.)
Method 3, by default synchronous**
(New-Object System.Net.WebClient).DownloadFile($url, $path_to_file)
Method 4, asynchronous for when you don't mind waiting
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $path_to_file
It uses the BITS service to download data when other processes don't need bandwidth (but as a result may be slower).
Notes:
*: This answer is for those that google for "how to download a file with PowerShell".
**: Read the help pages if you want asynchronous downloading