PowerShell [Core], начиная с 7.0, не поставляется со встроенным HTML синтаксическим анализатором .
Вы должны положиться на стороннее решение , такой как PowerHTML
модуль , который обертывает HTML Agility Pack .
объектная модель работает не так, как Inte rnet Explorer-based, доступная в Windows PowerShell; похоже на XML DOM, предусмотренное стандартом System.Xml.XmlDocument
тип [1] ; см. документацию и пример кода ниже.
# Install the module on demand
If (-not (Get-Module -ErrorAction Ignore -ListAvailable PowerHTML)) {
Write-Verbose "Installing PowerHTML module for the current user..."
Install-Module PowerHTML -ErrorAction Stop
}
Import-Module -ErrorAction Stop PowerHTML
# Create a sample HTML file with a table with 2 columns.
Get-Item $HOME | Select-Object Name, Mode | ConvertTo-Html > sample.html
# Parse the HTML file into an HTML DOM.
$htmlDom = ConvertFrom-Html -Path sample.html
# Find a specific table by its column names, using an XPath
# query to iterate over all tables.
$table = $htmlDom.SelectNodes('//table') | Where-Object {
$headerRow = $_.Element('tr') # or $tbl.Elements('tr')[0]
# Filter by column names
$headerRow.ChildNodes[0].InnerText -eq 'Name' -and
$headerRow.ChildNodes[1].InnerText -eq 'Mode'
}
# Print the table's HTML text.
$table.InnerHtml
# Extract the first data row's first column value.
# Note: @(...) is required around .Elements() for indexing to work.
@($table.Elements('tr'))[1].ChildNodes[0].InnerText
[1] В частности, относительно поддержки запросов XPath с помощью методов .SelectSingleNode()
и .SelectNodes()
предоставление дочерних узлов с помощью коллекции .ChildNodes
и предоставление свойств .InnerHtml
/ .OuterHtml
/ .InnerText
. Вместо indexer , который поддерживает имена дочерних элементов, предоставляются методы .Element(<name>)
и .Elements(<name>)
.