2024年2月14日 星期三

PowerShell 從網址下載檔案的所有方法

PowerShell 從網址下載檔案的所有方法


驗證網址是否有效

在下載前要先確認網址是否有效,比較簡易有效率的方法試直接驗Head就行,邏輯簡單但可能會有不適用情況,再自行調整。

# 檢查鏈接是否有效
function Test-URI {
    param (
        [Parameter(Mandatory)]
        [string] $Uri
    )
    try {
        # 嘗試發送 HEAD 請求
        $response = Invoke-WebRequest -Uri $Uri -Method Head -TimeoutSec 10
        # 檢查 HTTP 狀態碼是否為 200
        if ($response -and $response.StatusCode -eq 200) {
            return $true
        } else {
            # Write-Warning "Received HTTP status code $($response.StatusCode). The link might not be valid."
            return $false
        }
    } catch {
        # Write-Warning "Error checking the link: $_"
        return $null
    }
}

用例

$link = 'https://www.google.com/'
if (!(Test-URI $link)) {
    Write-Error "The link might not be valid" -ErrorAction Stop
} else { Write-Host $link -ForegroundColor DarkGray }




下載指令

這裡有好幾個指令大概簡單介紹一下,自己挑一個合適的用


方法1 .Net 方法

最建議使用的方法
事實上有許多大型專案的教學安裝時用指令就是這個

(New-Object Net.WebClient).DownloadFile($Url, $DLPath)


方法2 Start-BitsTransfer 方法

這個載起來也比 Invoke-WebRequest 好上一些,有個優點是可以續傳
不過只能在 Windwos 下使用並且如果系統本身沒啟用該服務也會無法使用

Start-BitsTransfer -Source $Url -Destination $DLPath


方法3 Invoke-WebRequest 方法

這個其實更適合用來載純文字的網址,主要是用來查網頁Headder之類的

其他還有好幾個別名可以用

  • curl -> Invoke-WebRequest
  • iwr -> Invoke-WebRequest
  • wget -> Invoke-WebRequest
Invoke-WebRequest -Uri $Url -OutFile $DLPath



沒有留言:

張貼留言