2013-03-22 3 views
4

아래의 powershell 스크립트를 사용하여 출력을 HTML 파일에 씁니다. 문제는 텍스트를 모두 텍스트로 렌더링하는 것입니다.Powershell을 사용하여 클릭 가능한 링크를 렌더링하는 방법

내 코드 :

$PagesObject = New-Object PSObject 
Add-Member -input $PagesObject noteproperty 'Site Url' $spweb.url 
Add-Member -input $PagesObject noteproperty 'Page Title' $PageTitle 
Add-Member -input $PagesObject noteproperty 'Page Url' "<a href="$PagesUrl">$PageTitle</a>"  
$results += $PagesObject 
$results | ConvertTo-HTML -head $a -body | Out-File \\myfolder\InventoryReports\$CurrentMonth.html 

내가 사전에 지금 enter image description here

감사를 렌더링하는 방법을 참조하기 위해 클릭 할 수있는 링크 그것을 스크린 샷 아래

검사를 렌더링 할

답변

6

PowerShell을 특수 문자를 인코딩합니다.

$pso = New-Object PSObject -Property @{ 
    SiteUrl = $spweb.url 
    PageTitle= $PageTitle 
    PageUrl = "<a href='$PagesUrl'>$PageTitle</a>" 
} | ConvertTo-Html 


$pso -replace '&gt;','>' -replace '&lt;','<' -replace '&#39;',"'" | 
Out-File \\myfolder\InventoryReports\$CurrentMonth.html 

UPDATE :

Add-Type -AssemblyName System.Web 
[System.Web.HttpUtility]::HtmlDecode($pso) 
: 여기

모든 HTML 엔티티 처리됩니다 더 좋은 방법이 문제를 해결하는 한 가지 방법은 파일 오티 다시 변환 한 후 그 결과를 작성하는 것

+0

이'Add-Type -AssemblyName System.Web 스크립트 시작시 [System.Web.HttpUtility] :: HtmlDecode ($ pso)'? – Nish

+0

예 또는 처음 사용하기 바로 전에. –

1

$pso = New-Object PSObject -Property @{ 
    SiteUrl = $spweb.url 
    PageTitle= $PageTitle 
    PageUrl = "<a href='$PagesUrl'>$PageTitle</a>" 
} | ConvertTo-Html 

Add-Type -AssemblyName System.Web 

[System.Web.HttpUtility]::HtmlDecode($pso) | 
Out-File \\myfolder\InventoryReports\$CurrentMonth.html 
0

html로 :: 디코드 또는 등록 번호를 사용하는 것보다 다른이를 할 수있는 일반적인 방법이 있습니다 특급. 그것은 훨씬 더 복잡하지만 링크 열 이외의 일부 열에는 링크처럼 처리해서는 안되는 특수 HTML 문자가 들어있는 경우 유용 할 수 있습니다 (예 : $ PageTitle에 "foo < bar"와 같은 내용이있는 경우, Html :: Decode 사용 후).

이 접근법은 ConvertTo-Html이 Powershell/.Net XML 기능에서 사용할 수있는 유효한 XHTML을 생성한다는 사실을 사용합니다. 주요 개념은 cmdlet 출력을 XML 문서로 변환 한 다음 XPath로 링크 열을 검색하고 DOM 함수를 사용하여 링크를 만들도록 수정하는 것입니다. 숫자가 - 'TD [N] // X 표/X : TR/X', N은

$pso = New-Object PSObject -Property @{ 
    SiteUrl = 'foobar.org' 
    PageTitle = 'x&z a<b<c' 
    PageUrl = 'foobar.org/contact.html' 
} | ConvertTo-Html 

$xmlDoc = [xml]$pso 
$xhtmlNS = 'http://www.w3.org/1999/xhtml' 
$xmlNSManager = New-Object System.Xml.XmlNamespaceManager $xmlDoc.NameTable 
$xmlNSManager.AddNamespace('x', $xhtmlNS) 
$xmlDoc.SelectNodes('//x:table/x:tr/x:td[3]', $xmlNSManager) | %{ 
    $a = $xmlDoc.CreateElement('a', $xhtmlNS) 
    $a.setAttribute('href', $_.'#text') 
    [void]$a.AppendChild($xmlDoc.CreateTextNode('Contact Us')) 
    [void]$_.ReplaceChild($a, $_.FirstChild) 
} 

$xmlDoc.OuterXml | Out-File 'test.html' 

XPath를 제 n 열의 셀을 검색하는 문자열이다 : 여기

는 코드이며 열 (인덱스는 1부터 시작 함). Xml Namespace breaking my xpath!

다음과 같은 XPath를 한 번에 수정하려면 다음을 사용할 수 있습니다. '// x : table/x : tr (예 : XmlNamespaceManager 및 펑키'x : '접두어)/x : td [position() = 1 또는 position() = 2 or ... 또는 position() = last()] '

foreach ($td in $xmlDoc.SelectNodes('//x:table/x:tr/x:td[position()=1 or position()=2 or ... or position()=last()]', $xmlNSManager)) { 
    # processing first column cells 
    [void]$foreach.MoveNext() 
    # processing second column cells 
    [void]$foreach.MoveNext() 
    # etc 
}