我已经编写了此powershell脚本来从url下载文件。它工作正常,但我的脚本仅检查文件名,并且如果下载的文件已损坏,则此脚本不会重新下载文件。使用Powershell可以做到吗?我还需要在download_history.log文件中记录错误。
$start_time = Get-Date
$download_folder_v3 = "D:\test"
# Download URL list
$page_url_v3 = "http://test.com/example"
$file_path_v3 = "http://test.com/example/v3/"
$files_downloaded = 0
"Starting Download $(Get-Date)" >> $download_folder_v3\download_history.log
# Test for download folder and create if doesn't exist
If (-Not (Test-Path "$download_folder_v3")) {
echo "creating $download_folder_v3 " >> $download_folder_v3\download_history.log
New-Item $download_folder_v3 -type directory
}
Else {
echo "$download_folder_v3 already exists" >>
$download_folder_v3\download_history.log
}
$filename_list = Split-Path -Leaf ((Invoke-WebRequest -UseBasicParsing -Uri $page_url_v3).Links.Href)
foreach ($file in $filename_list) {
If (Test-Path "$download_folder_v3\$file") {
echo "$download_folder_v3\$file already exists" >> $download_folder_v3\download_history.log
}
Else {
echo "Downloading $_file_path_v3$file to $download_folder_v3\$file" >> $download_folder_v3\download_history.log
Invoke-WebRequest -Uri ($_file_path_v3+$file) -UseBasicParsing -OutFile "$download_folder_v3\$file"
$files_downloaded += 1
}
}
是,但是您需要提前知道下载文件的校验和,或者有一种方法可以从下载服务器中检索这些文件。您可以使用Get-FileHash
cmdlet验证期望的校验和。例如,如果您知道下载文件的预期SHA256校验和:
( Get-FileHash -Algorithm SHA256 C:\Path\To\File.extension ).Hash -eq 'expected_checksum'
您也可以check the expected file size using the Content-Length
header(以字节为单位,并且仅在Web服务器使此信息可用时才起作用),但这不如检查文件的校验和准确。
Content-Length