超まとめ
Get-Contentsで読み込んだ文字列配列(String[])から、特定の行で囲まれている範囲を取り出す関数です。
<# .SYNOPSIS Get-Contentsで読み込んだStrng[]などから、特定の行で囲まれた範囲を抽出します。 .EXAMPLE 下記の様な文字列配列に対して $exampleStr = @( "aaa", "bbb", "ccc", "ddd", "eee" ) GetRangeLimitedLines -contents $exampleStr -matchLinestringForStart "aaa" -matchLinestringForEnd "ddd" は @("bbb","ccc")を返します。 GetRangeLimitedLines -contents $exampleStr -matchLinestringForStart "bbb" -matchLinestringForEnd "ddd" は @("bbb","ccc","ddd")を返します。 #> function GetRangeLimitedLines() { param ( [string[]] #検索対象の文字列配列 $contents, [string] #抽出範囲の開始行文字列 $matchLinestringForStart, [string] #抽出範囲の終了後文字列 $matchLinestringForEnd, [switch] #$trueの場合、matchLinestringForXXを含むString[]を返す $containMatchstring = $false, [int] #開始行文字列を検索開始するインデックス $startIndex = 0 ) $startIndex = [Array]::IndexOf($contents, $matchLinestringForStart, $startIndex) $endIndex= [Array]::IndexOf($contents, $matchLinestringForEnd, $startIndex+1) if( ($startIndex -eq -1) -or ($endIndex -eq -1) ) { return $null } else { if($containMatchstring) { return $contents[$startIndex .. $endIndex] } else { return $contents[ ($startIndex+1) .. ($endIndex-1) ] } } }
自由書式なログファイルを機械処理するために用意しました。