我正在尝试生成Powershell中收集的数据的HTML报告。我想最终得到HTML链接,以获取有关表中不同元素的更具体信息。特别是,第一列包含虚拟机的名称,但这不是特别重要。我试图用链接替换名称值。
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$xml.table.tr[$i].td[0].replace($xml.table.tr[$i].td[0],"<a href=`"http://stackoverflow.com`">myLink</a>")
}
$file = Join-Path C:\users\myname\Documents "VMSpecs.html"
ConvertTo-Html -Title "VM Specs" `
-CssUri C:\Users\myname\Documents\style.css `
-Body $($xml.InnerXml) | Out-file $file
Invoke-item $file
根据输出,$ xml.table.tr [$ i] .td [0]的值将被链接信息替换,但不会永久替换。当文件写入HTML时,无法找到链接信息,原始值仍保留在td el
所以,大局,我想知道如何在特定位置将链接附加到html -fragment中。任何样本或资源都有很大的责任。
答案 0 :(得分:1)
两者.Replace和-replace都会生成一个新字符串。你想要做的是重新分配结果:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$xml.table.tr[$i].td[0] = $xml.table.tr[$i].td[0].replace($xml.table.tr[$i].td[0],"<a href=`"http://stackoverflow.com`">myLink</a>")
}
虽然在这种特殊情况下,似乎根本不需要替换。由于您要替换td的全部内容,只需直接指定它:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$xml.table.tr[$i].td[0] = "<a href=`"http://stackoverflow.com`">myLink</a>"
}
我最初误读了你的问题是关于替换,而不是分配给一个节点。看起来当你得到如上所述的特定元素时,PowerShell会将其转换为字符串,因此你实际上并没有更新节点。试试这个:
for($i=1; $i -le $xml.table.tr.Count-1; $i++){
($xml.table.tr[$i].GetElementsByTagName("td") | Select-Object -First 1)."#text" = "<a href=`"http://stackoverflow.com`">myLink</a>"
}
“#text”属性可能会有所不同,我不确定。我使用一个非常简单的HTML文件进行了测试,并且通过在生成的XML对象的每个级别上执行Get-Member,我发现这是我需要更新的属性。
嗯......好吧,试试吧。创建一个包含该链接的新XML元素,并将其附加到td元素:for($i=1; $i -le $xml.table.tr.Count-1; $i++){
$link = $xml.CreateElement("a")
$link.SetAttribute("href", "http://stackoverflow.com")
$link.InnerText = "myLink"
$xml.table.tr[$i].FirstChild."#text" = ""
$xml.table.tr[$i].FirstChild.AppendChild($link)
}