用于下载文件并检查下载文件完整性的Powershell脚本

问题描述 投票:0回答:1

我已经编写了此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
    }
}
powershell powershell-4.0
1个回答
0
投票

是,但是您需要提前知道下载文件的校验和,或者有一种方法可以从下载服务器中检索这些文件。您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.