使用版本从microsoft网站获取SQL产品名称- powershell / Invoke-webrequest

zphenhs4  于 2023-04-30  发布在  Shell
关注(0)|答案(1)|浏览(103)

我在报废微软网站工作,我想获取SQL产品名称,如“SQL版本2012”使用他们的版本“11.0.6607.3”。
基本上我想用他们的版本搜索他们的产品名称。使用invoke-webrequest帮助我使用powershell。
先谢了
这是我曾经尝试过的

$url = "https://learn.microsoft.com/en-us/troubleshoot/sql/releases/download-and-install-latest-updates"
$html.content = Invoke-WebRequest  -Uri $url

# Find the table rows (tr) in the HTML
$rows = ($html.content).ParsedHtml.getElementsByTagName('tr')

# Define the version number to search for
$searchVersion = '11.0.5058.0'

# Loop through the rows and find the matching version number
foreach ($row in $rows) {
    $cells = $row.getElementsByTagName('td')
    if ($cells.Count -gt 1 -and $cells[1].innerText -match $searchVersion) {
        # The version number is found in the second cell of the row
        # Output the SQL Server version from the first cell of the same row
        Write-Output $cells[0].innerText
        break  # Exit the loop after the first match is found
    }
}
xdyibdwo

xdyibdwo1#

这里有一个快速和肮脏的方法来做这件事(没有错误处理),工作与该网址 * 今天 *,但它是脆弱的,可能会打破,如果页面布局的变化。..

$url = "https://learn.microsoft.com/en-us/troubleshoot/sql/releases/download-and-install-latest-updates";

$html = (Invoke-WebRequest -Uri $url -UseBasicParsing).Content;

$searchVersion = "11.0.5058.0";

# find the version text
$index = $html.IndexOf($searchVersion);

# find the start of the containing "<tr>"
$tr = $html.LastIndexOf("<tr>", $index);

# find the text inside the following "<strong>...</strong>"
$start = $html.IndexOf("<strong>", $tr) + "<strong>".Length;
$end = $html.IndexOf("</strong>", $tr);
$name = $html.Substring($start, $end - $start);

$name
# SQL Server 2012

最好使用像HTML Agility Pack这样的适当的HTML解析器库,但是对于像这样的简单用例,使用基本的字符串搜索就足够了。
请注意,ParsedHtml属性在PowerShell“核心”中不可用,因此如果您正在编写新代码,如果您避免使用它并添加-UseBasicParsing开关,即使您目前针对的是Windows PowerShell,它也会更加面向未来。
由于SQL Server并不经常获得新版本,因此在脚本中硬编码一个哈希表来进行查找可能会更好。..

相关问题