如何向com HTML对象powershell添加新行
我有一个表,试图使用powershell添加更多行,然后将其导出为新的HTML文件 这是我试图添加行的HTML的主体如何向com HTML对象powershell添加新行,html,powershell,com,Html,Powershell,Com,我有一个表,试图使用powershell添加更多行,然后将其导出为新的HTML文件 这是我试图添加行的HTML的主体 <BODY> <TABLE style="WIDTH: 100%" cellPadding=5> <TBODY> <TR> <TH>Bruger</TH> <TH>Windows</TH> <TH>Installations dato</TH>
<BODY>
<TABLE style="WIDTH: 100%" cellPadding=5>
<TBODY>
<TR>
<TH>Bruger</TH>
<TH>Windows</TH>
<TH>Installations dato</TH>
<TH>Model</TH>
<TH>Sidst slukket</TH></TR>
<TR>
<TD>Users name</TD>
<TD>Windows 10 Pro</TD>
<TD>23-01-2020</TD>
<TD>ThinkPad</TD>
<TD>7 dage</TD></TR></TBODY></TABLE>
<TABLE>
<TBODY></TBODY></TABLE></BODY>
布吕热
窗户
达托装置
模型
西德斯特斯卢克特
用户名
Windows10Pro
23-01-2020
ThinkPad
7达格
我想我需要更改对象的内部html,但这只是抛出了一个错误。
这是我的密码
$src = [IO.File]::ReadAllText($outPath)
$doc = New-Object -com "HTMLFILE"
$doc.IHTMLDocument2_write($src)
$elm = $doc.getElementsByTagName('tr')[0]
$elm.innerHTML = "<TR>New row!</TR>"
$src=[IO.File]::ReadAllText($outPath)
$doc=新对象-com“HTMLFILE”
$doc.IHTMLDocument2_write($src)
$elm=$doc.getElementsByTagName('tr')[0]
$elm.innerHTML=“新行!”
当我检查内部html变量时,我得到了预期的html输出,因此它获取了正确的对象,但无论出于何种原因,我都无法为它分配任何内容
这是错误
Exception from HRESULT: 0x800A0258
At line:1 char:1
+ $elm.innerHTML = "<TH>User</TH>"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
来自HRESULT的异常:0x800A0258
第1行字符:1
+$elm.innerHTML=“用户”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+类别信息:操作停止:(:)[],COMException
+FullyQualifiedErrorId:System.Runtime.InteropServices.COMException
您需要:
- 创建一个新的
元素- 创建任何必需的子元素
- 将
元素追加到新行
- 将新行追加到现有的
$html = @'
<BODY>
<TABLE style="WIDTH: 100%" cellPadding=5>
<TBODY>
<TR>
<TH>Bruger</TH>
<TH>Windows</TH>
<TH>Installations dato</TH>
<TH>Model</TH>
<TH>Sidst slukket</TH></TR>
<TR>
<TD>Users name</TD>
<TD>Windows 10 Pro</TD>
<TD>23-01-2020</TD>
<TD>ThinkPad</TD>
<TD>7 dage</TD></TR></TBODY></TABLE>
<TABLE>
<TBODY></TBODY></TABLE></BODY>
'@
# Create HTML document object
$doc = New-Object -ComObject HTMLFile
# Load existing HTML
$doc.IHTMLDocument2_write($html)
# Create new row element
$newRow = $doc.createElement('tr')
# Create new cell element
$newCell = $doc.createElement('td')
$newCell.innerHTML = "New row!"
$newCell.colSpan = 5
# Append cell to row
$newRow.appendChild($newCell)
# Append row to table body
$tbody = $doc.getElementsByTagName('tbody')[0]
$tbody.appendChild($newRow)
# Inspect resulting HTML
$tbody.outerHtml
然后使用类似于:
Import-Csv .\path\to\user-os-list.csv |New-HTMLFileTableRow -Property User,OSVersion,InstallDate,Model,LastActive -Document $doc |ForEach-Object {
[void]$tbody.appendChild($_)
}
在这种情况下,最好在源位置更改数据。该网站可能接收到某种结构化数据,然后转换为html。仅供参考,转换为html比从html更容易。强烈建议您在另一端解决此问题。这非常有效,谢谢!不过有一个问题,我怎么才能删除一行?@Baxorr不客气!要删除节点/元素,请找到父元素并删除子节点,例如,
$row1=$doc.getElementsByTagName('tr')[1];[void]$row1.parentElement.removeChild($row1)
Dude你太棒了!我找不到这方面的任何文档anywhere@Baxorr这里有一个技巧:HTMLDOM本质上是一个活动的XML文档,因此我只采用与编辑XML时相同的方法:)
Import-Csv .\path\to\user-os-list.csv |New-HTMLFileTableRow -Property User,OSVersion,InstallDate,Model,LastActive -Document $doc |ForEach-Object {
[void]$tbody.appendChild($_)
}