使用PowerShell/Invoke-WebRequest从微软网站通过版本号获取SQL产品名称
通过版本号查找SQL Server产品名称的PowerShell脚本
原脚本存在的问题
- 变量赋值错误:
$html.content = Invoke-WebRequest -Uri $url写法错误,应直接将请求结果赋值给变量 ParsedHtml依赖IE组件,PowerShell Core版本不支持,兼容性差- 模糊匹配逻辑(
-match)可能导致误匹配,比如包含目标版本号的其他版本
修正后的兼容版脚本
# 目标页面URL $url = "https://learn.microsoft.com/en-us/troubleshoot/sql/releases/download-and-install-latest-updates" # 发送请求获取HTML内容,添加错误处理 try { $response = Invoke-WebRequest -Uri $url -ErrorAction Stop } catch { Write-Error "页面请求失败:$_" exit 1 } # 定义要搜索的目标版本号 $searchVersion = '11.0.5058.0' # 将HTML转为XML格式,用XPath解析表格行 $xmlContent = [xml]$response.Content $rows = Select-Xml -Xml $xmlContent -XPath "//tr" # 遍历所有表格行查找匹配项 foreach ($row in $rows) { $cells = $row.Node.SelectNodes("td") # 确保行有足够单元格,且版本列(第二列)精确匹配目标版本 if ($cells.Count -ge 2 -and $cells[1].InnerText.Trim() -eq $searchVersion) { Write-Output "匹配结果:$($cells[0].InnerText.Trim())" exit 0 } } # 未找到匹配时输出提示 Write-Output "未找到版本号 '$searchVersion' 对应的SQL产品名称"
脚本说明
- 增加了请求错误处理,避免脚本因页面无法访问直接崩溃
- 使用
Select-Xml+XPath解析HTML,兼容PowerShell 5.x和Core全版本 - 采用精确匹配(
-eq)避免误匹配,若需模糊匹配(如匹配主版本),可将条件改为:$cells[1].InnerText.Trim() -like "$searchVersion*" - 对单元格文本做
Trim()处理,消除空格对匹配结果的影响
内容的提问来源于stack exchange,提问作者scode123
相关产品推荐
相关产品推荐

