You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获BitsTransfer模块的各类错误(如路径不可访问、需凭证等)

针对BitsTransfer模块的精准错误捕获实现方案

原代码仅捕获泛型System.Exception,无法区分具体错误场景。要覆盖下载链接/目标路径无效、权限不足、凭证需求等场景,需利用PowerShell错误对象的类型、错误代码和状态信息做精准判断,以下是优化后的实现:

完整代码示例

Import-Module BitsTransfer

Try {
    $Source = "https://example.com/non-exist-file.zip" # 测试用无效源
    $Destination = "C:\Invalid\Path\file.zip" # 测试用无效目标路径
    Start-BitsTransfer -Source $Source -Destination $Destination -Priority Foreground -ErrorAction Stop
}
# 捕获网络类错误(源链接不可访问、需要凭证等)
Catch [System.Net.WebException] {
    $webError = $_.Exception.Response.StatusCode
    switch ($webError) {
        'NotFound' { Write-Warning "错误:指定的下载链接不存在(404)" }
        'Unauthorized' { Write-Warning "错误:访问下载链接需要身份凭证(401)" }
        'Forbidden' { Write-Warning "错误:无权限访问下载链接(403)" }
        default { Write-Warning "网络错误:$webError" }
    }
}
# 捕获本地文件系统错误(目标路径不存在、无写入权限等)
Catch [System.IO.IOException] {
    if ($_.Exception.Message -match "路径不存在") {
        Write-Warning "错误:目标路径不存在,请检查路径有效性"
    } elseif ($_.Exception.Message -match "权限") {
        Write-Warning "错误:无权限写入目标路径,请提升权限或更换路径"
    } else {
        Write-Warning "文件系统错误:$($_.Exception.Message)"
    }
}
# 捕获BitsTransfer服务相关的特定错误
Catch [Microsoft.BackgroundIntelligentTransfer.Management.BitsException] {
    Write-Warning "Bits服务错误:$($_.Exception.Message)"
}
# 兜底捕获未覆盖的其他异常
Catch {
    Write-Warning "未知错误:$($_.Exception.Message)"
}

关键说明

  • 按错误类型分层捕获:通过指定不同的异常类型,将网络、文件系统、Bits服务错误区分开,避免泛泛的错误提示
  • 精准判断错误场景:
    • 网络错误通过StatusCode区分404(链接不存在)、401(需凭证)、403(无权限)等场景
    • 文件系统错误通过异常消息关键词判断路径不存在、权限不足等问题
  • 兜底捕获:最后保留无类型的Catch块,处理未覆盖的意外错误

内容的提问来源于stack exchange,提问作者eRcumenT14141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:48:27