开始之前的小注解: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 将像 &lt; 这样的值转换回我们想要的值。看看输出
去看看以前是否有人问过这个问题,并且有一个类似的答案:How to generate hyperlinks to .htm files in a directory in Powershell?。它以不同的方式处理,所以我在围栏上将其标记为重复。