如何捕获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
相关产品推荐
相关产品推荐

