【问题标题】:Convert a list of URLs into clickable HTML links using ConvertTo-HTML使用 ConvertTo-HTML 将 URL 列表转换为可点击的 HTML 链接
【发布时间】:2014-12-26 04:11:34
【问题描述】:

我有下面的函数,它将创建一个 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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    开始之前的小注解:ForEach 似乎毫无意义,因为它只是为表中的每个元素输出排序表。这样就被删除了。

    ConvertTo-HTML 本身非常适合使用 PowerShell 对象制作表格,但我们需要的是超链接。 ConvertTo-HTML 确实支持计算属性,所以起初只创建一个格式化的超链接似乎很容易。

    ConvertTo-HTML -Property *,@{Label="Link";Expression={"<a href='$($_.Value)'>$($_.Name)</a>"}}
    

    其中的一个小问题是ConvertTo-Html 对发送给它的字符串进行了一些转换,这混淆了我们的意图。查看创建的输出文件,我们看到 Yahoo 链接的以下内容:

    <td>&lt;a href=&#39;www.yahoo.com&#39;&gt;Yahoo&lt;/a&gt;</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 将像 &amp;lt; 这样的值转换回我们想要的值。看看输出

    去看看以前是否有人问过这个问题,并且有一个类似的答案:How to generate hyperlinks to .htm files in a directory in Powershell?。它以不同的方式处理,所以我在围栏上将其标记为重复。

    【讨论】:

    • 谢谢马特,这似乎可行,但假设我只想禁用一些链接,我该怎么办?
    • 禁用是什么意思?选择不将它们添加到表中?如果您不想要它们,为什么它们应该在哈希表中?你如何决定禁用什么? @萝莉
    • 因为本来我是想将文件夹名称添加到我在扫描函数中找到的哈希表中,所以有一个条件是找到或找不到文件夹。
    • 如果是这种情况,那么您就不会使用哈希表,只要您有正确的过滤器,听起来您只是在使用Get-ChildItem 和 where 子句来获取您的文件夹。如果您仍有问题,请提出一个新问题,因为范围会发生变化。
    • 正是我使用 get-childitem -path "c:\program files\" 和 foreach 并添加到哈希表。
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2022-11-24
    • 2014-02-22
    • 2010-12-26
    • 2013-02-18
    • 2020-08-25
    相关资源
    最近更新 更多