求助:编写可用的PowerShell联网检测与文件下载脚本
修复你的PowerShell网络检测与文件下载脚本
我帮你找出了原脚本里的几个关键问题,并且给出了修复后的完整版本,一起来看看:
原脚本的主要问题
- 空的
if条件:你没有把Test-NetConnection的检测逻辑放进if()的括号里,导致脚本根本不知道该判断什么 - 错误的语法:
fi是Bash等Shell的语法,PowerShell里不需要它,直接用}就能闭合if-else块 - 中文全角引号:脚本里的引号是中文的“”,PowerShell只能识别英文半角的""或'',这会直接导致语法错误
- 未正确判断检测结果:
Test-NetConnection返回的是一个对象,你需要检查它的属性(比如TcpTestSucceeded)来确认网络是否连通
修复后的完整脚本(推荐版本)
这个版本用Test-NetConnection检测HTTP端口连通性,并且加入了错误捕获来处理下载过程中的异常:
# 检测到www.hawk.de的HTTP端口(80)是否连通 $connectionStatus = Test-NetConnection www.hawk.de -CommonTCPPort HTTP if ($connectionStatus.TcpTestSucceeded) { try { # 初始化WebClient对象 $webClient = New-Object System.Net.WebClient # 获取凭据(如果目标网站需要验证) $webClient.Credentials = Get-Credential # 下载文件,注意使用英文半角引号 $webClient.DownloadFile( "https://www.mydomain.de/sites/default/files/styles/xs_12col_16_9_retina/public/DSC_6947.JPG", "C:\Users\Ole\Downloads\Github\bild.JPG" ) Write-Host "文件下载完成!" } catch { # 捕获下载过程中的错误并提示 Write-Host "下载失败:$($_.Exception.Message)" } } else { Write-Host "You are not connected with the internet" }
另一种更轻量的检测方式
如果你的环境里Test-NetConnection受限(比如没有管理员权限),可以直接尝试发送一个Web请求来判断网络状态:
try { # 尝试访问目标网站,5秒超时,忽略返回内容 Invoke-WebRequest -Uri "https://www.hawk.de" -UseBasicParsing -TimeoutSec 5 | Out-Null # 网络连通,执行下载 $webClient = New-Object System.Net.WebClient $webClient.Credentials = Get-Credential $webClient.DownloadFile( "https://www.mydomain.de/sites/default/files/styles/xs_12col_16_9_retina/public/DSC_6947.JPG", "C:\Users\Ole\Downloads\Github\bild.JPG" ) Write-Host "文件下载完成!" } catch { # 请求失败,说明未联网 Write-Host "You are not connected with the internet" }
关键说明
- 用
TcpTestSucceeded判断比Ping更准确:有些网络允许Ping但会阻止HTTP端口,检测TCP连接成功更能确保你能下载文件 try/catch块可以帮你捕获下载时的各种问题(比如权限不足、文件路径不存在、目标文件已删除等)- 一定要使用英文半角引号,PowerShell对符号的全半角非常敏感
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

