This will get the "Date taken" property from the files details and use that (or the current date/time if it's not a valid date/time) to rename the file. Note, however, that in your example you're using a colon (":") as part of the new file name. That immediately dooms you to failure! A colon is used to separate a device name (e.g. a drive letter) from the directory\file. The script just replaces that with a hyphen.
$FilePath = 'C:\junk\hunterexpressway_m1.jpg'
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile("https://roads-waterways.transport.nsw.gov.au/trafficreports/cameras/camera_images/hunterexpressway_m1.jpg", $FilePath)
# get the date/time the picture was taken
$Folder = Split-Path -Parent -Path $FilePath
$File = Split-Path -Leaf -Path $FilePath
$Shell = New-Object -COMObject Shell.Application
$ShellFolder = $Shell.NameSpace($Folder)
$ShellFile = $ShellFolder.ParseName($File)
$numberofdetails = 266 # adjust this as needed. There many be more than 266 details, or there may be fewer.
# it depends on the file, the O/S, and the version of the O/S
0..$numberofdetails |
ForEach-Object{
if ($ShellFolder.GetDetailsOf($null, $_) -eq 'Date taken'){
$d = $ShellFolder.GetDetailsOf($ShellFile, $_)
[datetime]$datetaken = $d -replace "[^0-9APM/ :]","" # get rid of BOM characters
# the date/time conversion should work
# but if it fails it'll throw an error
}
}
$ShellFile = $null
$ShellFolder = $null
$Shell = $null
if ($datetaken -isnot [DateTime]){
$datetaken = Get-Date # just use something sensible
}
# NOTE you cannot use ":" as part of the file name!
# so use a hyphen instead
$datepart = $datetaken.ToString("MM-dd-yyyy hh-mm") # get just date and time (without the colon)
[array]$f = $File -split "\."
$newfile = "{0}-{1}.{2}" -f $f[0], $datepart, $f[1]
Rename-Item -Path $FilePath -NewName "$newfile"
If you like, you can wrap the DownloadFile part of the script in a Try/Catch so it reacts in a sensible way to any failure.