PoshCode Logo PowerShell Code Repository

Out-Html by Vegard Hamar 8 years ago
View followups from Chad Miller and testing | embed code: <script type="text/javascript" src="http://PoshCode.org/embed/587"></script>download | new post

Out-HTML – converts cmdlets help to HTML format
Based on Out-wiki by Dimitry Sotnikov (http://dmitrysotnikov.wordpress.com/2008/08/18/out-wiki-convert-powershell-help-to-wiki-format/)

Modify the invocation line at the bottom of the script if you want to document fewer command, subsets or snapins
Open default.htm to view in frameset or index.htm for index page with links.

  1. ################################################################################
  2. # Out-HTML - converts cmdlets help to HTML format
  3. # Based on Out-wiki by Dimitry Sotnikov (http://dmitrysotnikov.wordpress.com/2008/08/18/out-wiki-convert-powershell-help-to-wiki-format/)
  4. #
  5. # Modify the invocation line at the bottom of the script if you want to document
  6. # fewer command, subsets or snapins
  7. # Open default.htm to view in frameset or index.htm for index page with links.
  8. ################################################################################
  9. # Created By: Vegard Hamar
  10. ################################################################################
  11.  
  12. param($outputDir = "./help")
  13.  
  14. function FixString {
  15.         param($in = "")
  16.         if ($in -eq $null) {
  17.                 $in = ""
  18.         }
  19.         return $in.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;")
  20. }
  21.  
  22. function Out-HTML {
  23.         param($commands = $null, $outputDir = "./help")
  24.  
  25.         $commandsHelp = $commands | sort-object PSSnapIn, noun | get-help -full
  26.  
  27.         #create an output directory
  28.         if ( -not (Test-Path $outputDir)) {
  29.                 md $outputDir | Out-Null
  30.         }
  31.  
  32.         #Generate frame page
  33.         $indexFileName = $outputDir + "/index.htm"
  34.        
  35.         #Generate frameset
  36. @'
  37. <html>
  38.         <head>
  39.                 <title>PowerShell Help</title>
  40.         </head>
  41.         <frameset cols="250,*">
  42.                 <frame src="./index.htm" />
  43.                 <frame src="" name="display"/>
  44.         </frameset>
  45. </html>
  46. '@ | Out-File "$outputDir/default.htm"
  47.  
  48.         #Generate index
  49. @'
  50. <html>
  51.         <head>
  52.                 <title>PowerShell Help</title>
  53.         </head>
  54.         <body>
  55. '@  | out-file $indexFileName
  56.  
  57.         $SnapIn = ""
  58.         foreach ($c in $commandsHelp) {
  59.                 if ($SnapIn -ne $c.PSSnapIn.Name) {
  60.                         "<a href='#" + $c.PSSnapIn.name + "'>* " + $c.PSSnapIn.Name.Replace(".", " ") + "</a></br>"   | out-file $indexFileName -Append
  61.                         $SnapIn = $c.PSSnapIn.Name
  62.                 }
  63.         }
  64.  
  65.         $SnapIn = ""
  66.         foreach ($c in $commandsHelp) {
  67.                 if ($SnapIn -ne $c.PSSnapIn.Name) {
  68.                         "<h3><a name='$($c.PSSnapIn.Name)'>" +$c.PSSnapIn.Name.Replace(".", " ") + "</a></h3>" | Out-File $indexFileName -Append
  69.                         $SnapIn = $c.PSSnapIn.Name
  70.                 }
  71.                 "<a href='" + $c.name + ".htm' target='display'>* $($c.Name)</a></br>"   | out-file $indexFileName -Append
  72.         }
  73.  
  74.         #Generate all single help files
  75.         $outputText = $null
  76.         foreach ($c in $commandsHelp) {
  77.                 $fileName = ( $outputDir + "/" + $c.Name + ".htm" )
  78.  
  79. @"
  80. <html>
  81.         <head>
  82.                 <title>$($c.Name)</title>
  83.         </head>
  84.         <body>
  85.                 <h1>$($c.Name)</h1>
  86.                 <div>$($c.synopsis)</div>
  87.  
  88.                 <h2> Syntax </h2>
  89.                 <code>$(FixString($c.syntax | out-string  -width 2000).Trim())</code>  
  90.  
  91.                 <h2> Detailed Description </h2>
  92.                 <div>$(FixString($c.Description  | out-string  -width 2000))</div>
  93.  
  94.                 <h2> Related Commands </h2>
  95.                 <div>
  96. "@ | out-file $fileName
  97.                 foreach ($relatedLink in $c.relatedLinks.navigationLink) {
  98.                         if($relatedLink.linkText -ne $null -and $relatedLink.linkText.StartsWith("about") -eq $false){
  99.                                 "                       * <a href='$($relatedLink.linkText).htm'>$($relatedLink.linkText)</a><br/>" | out-file $fileName -Append        
  100.                         }
  101.                 }
  102.          
  103. @"
  104.                 </div>
  105.                 <h2> Parameters </h2>
  106.                 <table border='1'>
  107.                         <tr>
  108.                                 <th>Name</th>
  109.                                 <th>Description</th>
  110.                                 <th>Required?</th>
  111.                                 <th>Pipeline Input</th>
  112.                                 <th>Default Value</th>
  113.                         </tr>
  114. "@   | out-file $fileName -Append
  115.  
  116.                 $paramNum = 0
  117.                 foreach ($param in $c.parameters.parameter ) {
  118. @"
  119.                         <tr valign='top'>
  120.                                 <td>$($param.Name)&nbsp;</td>
  121.                                 <td>$(FixString(($param.Description  | out-string  -width 2000).Trim()))&nbsp;</td>
  122.                                 <td>$(FixString($param.Required))&nbsp;</td>
  123.                                 <td>$(FixString($param.PipelineInput))&nbsp;</td>
  124.                                 <td>$(FixString($param.DefaultValue))&nbsp;</td>
  125.                         </tr>
  126. "@  | out-file $fileName -Append
  127.                 }
  128.                 "               </table>}"  | out-file $fileName -Append
  129.    
  130.                 # Input Type
  131.                 if (($c.inputTypes | Out-String ).Trim().Length -gt 0) {
  132. @"
  133.                 <h2> Input Type </h2>
  134.                 <div>$(FixString($c.inputTypes  | out-string  -width 2000).Trim())</div>
  135. "@  | out-file $fileName -Append
  136.                 }
  137.    
  138.                 # Return Type
  139.                 if (($c.returnValues | Out-String ).Trim().Length -gt 0) {
  140. @"
  141.                 <h2> Return Values </h2>
  142.                 <div>$(FixString($c.returnValues  | out-string  -width 2000).Trim())</div>
  143. "@  | out-file $fileName -Append
  144.                 }
  145.          
  146.                 # Notes
  147.                 if (($c.alertSet | Out-String).Trim().Length -gt 0) {
  148. @"
  149.                 <h2> Notes </h2>
  150.                         "<div>$(FixString($c.alertSet  | out-string -Width 2000).Trim())</div>
  151. "@  | out-file $fileName -Append
  152.                 }
  153.  
  154.                 # Examples
  155.                 if (($c.examples | Out-String).Trim().Length -gt 0) {
  156.                         "               <h2> Examples </h2>"  | out-file $fileName -Append      
  157.                         foreach ($example in $c.examples.example) {
  158. @"
  159.                 <h3> $(FixString($example.title.Trim(('-',' '))))</h3>
  160.                                 <pre>$(FixString($example.code | out-string ).Trim())</pre>
  161.                                 <div>$(FixString($example.remarks | out-string -Width 2000).Trim())</div>
  162. "@  | out-file $fileName -Append
  163.                         }
  164.                 }
  165. @"
  166.         </body>
  167. </html>
  168. "@ | out-file $fileName -Append
  169.         }
  170. @"
  171.         </body>
  172. </html>
  173. "@ | out-file $indexFileName -Append
  174. }
  175.  
  176. Out-HTML (Get-Command ) $outputDir

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me