Function Export-HtmlTable { <# .SYNOPSIS パイプ経由で入力されたコマンドレットの結果を HTML 形式の表に出力します。 (別名:eht) .DESCRIPTION パイプ経由で入力されたコマンドレットの結果を、DataTableパッケージを利用 したリッチな表に整形して HTML ファイルに出力します。以下の機能があります。 ・生成された表は、ソート、検索による絞り込み、列項目選択、列項目移動※、 縦横スクロール※が可能です。      ※左端列は固定 はサポートしていません。 .PARAMETER FilePath HTML ファイルのパスを指定します。このパラメータは必須です。 拡張子が .html と異なる場合は、末尾に .html が付加されます。 .PARAMETER LiteralPath HTML ファイルのパスを指定します。FilePath パラメータと異なり、ワイルド カードは認識されません。拡張子が .html と異なる場合は、末尾に .html が 付加されます。(別名:PSPath) .PARAMETER Force 書き込み禁止のファイルに対しても上書きを行ないます。 .PARAMETER NoClobber ファイルの上書きを禁止します。 .PARAMETER Title 表のタイトルを指定します。既定値は空白("")です。(別名:t) .PARAMETER InputObject 入力オブジェクトをパイプ経由で受け取ります。 .EXAMPLE 実行中プロセスの ID, プロセス名, CPU, 非ページメモリ, ページアウト可能 メモリ, ワーキングセット を HTML 形式の表に保存 PS> ps | select Id, ProcessName, CPU, NPM, PM, WS | eht process.html .INPUTS コレクション(配列)型オブジェクトのパイプ経由入力 .OUTPUTS HTML ファイル .NOTES 作者: earthdiver1 バージョン: V0.32 クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。 #> [Alias("eht")][CmdletBinding(DefaultParameterSetName="ByPath")] param( [Parameter(ParameterSetName="ByPath", Mandatory=$true, Position=0)] [ValidateNotNullOrEmpty()] [String]$FilePath, [Parameter(ParameterSetName="ByLiteralPath", Mandatory=$true)] [ValidateNotNullOrEmpty()] [Alias("PSPath")][String]$LiteralPath, [switch]$Force, [Alias("NoOverwrite")][Switch]$NoClobber, [Alias("t")][String]$Title = "", [Parameter(ValueFromPipeline=$True)] [ValidateNotNull()] [PSObject]$InputObject ) $ErrorActionPreference = "Stop" $MyName = $MyInvocation.InvocationName if ($InputObject -eq $Null) { return } if ($PSBoundParameters.ContainsKey("FilePath")) { # -FilePath が指定された場合 if ($FilePath -NotMatch '\.html$') { $FilePath += ".html" } $htmlfile = $FilePath | Resolve-Path -EA SilentlyContinue | Convert-Path | ? { Test-Path $_ -PathType Leaf } if ($?) { # ワイルドカードパス if ($htmlfile.count -eq 0) { throw "$MyName : ワイルドカード パス $FilePath がファイルに解決されなかったため、操作を実行できません。" } elseif ($htmlfile.count -gt 1) { throw "$MyName : パスが複数のファイルに解決されるため、操作を実行できません。このコマンドを複数ファイルに使用できません。" } } else { $htmlfile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($FilePath) } } else { # -LiteralPath が指定された場合 if ($LiteralPath -NotMatch '\.html$') { $LiteralPath += ".html" } $htmlfile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($LiteralPath) } if (Test-Path $htmlfile) { if ($PSBoundParameters.ContainsKey("NoClobber")) { throw "$MyName : ファイル '$htmlfile' は既に存在します。" } elseif ((Get-ChildItem $htmlfile).IsReadOnly -and (-not $Force)) { throw "$MyName : パス '$htmlfile' へのアクセスが拒否されました。" } } $head = "$(Split-Path $htmlfile -Leaf)`r`n" + @' '@ try { $n = 0 $Input | ConvertTo-Html -Head $head -Body "

$Title

" | % { if ($_ -match '^') { $n++ } $_ = $_ -Replace '^', '
' $_ = $_ -Replace '^.*?', '' $_ = $_ -Replace '', "`r`n" $_ = $_ -Replace '
', '
No.' $_ = $_ -Replace '
', "
$n" $_ = $_ -Replace '^
', "`r`n" $_ = $_ + "`r`n" [Text.Encoding]::UTF8.GetBytes($_) } | Set-Content $htmlfile -Encoding Byte -Force } catch { throw } }