我有下面的函数将创建一个HTML表格,但我希望我的表格中的值超链接。
Function MyFunction{
clear-host
$item=$null
$hash = $null #hashTable
$hash =@{"Google.com" = "www.google.com"; "Yahoo" = "www.yahoo.com";"My Directory" ="C:\Users\Public\Favorites" ;"MSN" = "www.msn.com"}
ForEach($item in @($hash.KEYS.GetEnumerator())){
$hash | Sort-Object -Property name
}
$hash.GetEnumerator() | sort -Property Name |Select-Object Name, Value | ConvertTo-HTML | Out-File .\Test.html
}
MyFunction
答案 0 :(得分:5)
我们开始之前的小旁注:ForEach
似乎毫无意义,因为它只输出表中每个元素的排序表。这样就被删除了。
ConvertTo-HTML
本身非常适合用PowerShell对象创建表,但我们需要的是超链接。 ConvertTo-HTML
确实支持计算属性,因此首先看起来很容易制作格式化的超链接。
ConvertTo-HTML -Property *,@{Label="Link";Expression={"<a href='$($_.Value)'>$($_.Name)</a>"}}
这个小问题是ConvertTo-Html
对发送给它的字符串进行了一些转换,这会模糊我们的意图。查看创建的输出文件,我们在Yahoo链接中看到以下内容:
<td><a href='www.yahoo.com'>Yahoo</a></td>
ConvertTo-Html
使我们的文本浏览器友好,这通常很好但现在阻碍我们。从PowerShell Magazine读取博客会在发送到文件之前通过解码 html来解决此问题。
Function MyFunction{
clear-host
$hash = @{"Google.com" = "www.google.com"; "Yahoo" = "www.yahoo.com";"My Directory" ="C:\Users\Public\Favorites" ;"MSN" = "www.msn.com"}
$hash.GetEnumerator() | sort -Property Name | Select-Object Name, Value |
ConvertTo-HTML -Property *,@{Label="Link";Expression={"<a href='$($_.Value)'>$($_.Name)</a>"}}
}
$html = MyFunction
Add-Type -AssemblyName System.Web
[System.Web.HttpUtility]::HtmlDecode($html) | Out-File C:\temp\test.html
使用[System.Web.HttpUtility]::HtmlDecode
将<
等值转换回我们想要的值。看一下输出
我们之前一直在问这个问题,并且有一个类似的答案:How to generate hyperlinks to .htm files in a directory in Powershell?。它以不同的方式处理,因此我可以将其标记为重复。