Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向com HTML对象powershell添加新行_Html_Powershell_Com - Fatal编程技术网

如何向com HTML对象powershell添加新行

如何向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>

我有一个表,试图使用powershell添加更多行,然后将其导出为新的HTML文件

这是我试图添加行的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>

布吕热
窗户
达托装置
模型
西德斯特斯卢克特
用户名
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($_)
}