インポート-Iis-ログ
質問の賛成コメントによって投稿された役立つリンク ( https://poshcode.org/2574 ) が壊れているため、Web ページの元のコンテンツ (PowerShell スクリプト) を以下に示します (誰かの役に立つ場合に備えて)。
Import-Iis-Log 作成者: Mark Shevchenko
W3C 形式で保存された IIS*log
ファイルを読み込みます。
このImport-Iis-Log
コマンドレットは、IIS*log
ファイル (W3C 形式で保存) からデータを読み取り、そのデータを Windows PowerShell コンソール内に表形式で表示する方法を提供します。
パラメーター:
Path
(文字列、必須、位置 = 0、パイプラインからの値、null 以外、空でない) インポートする IIS *.log ファイルへのパスを指定します。Import-Iss-Log へのパスをパイプすることもできます。
Delimiter
(string, position = 1, not null, not empty) IIS *log ファイルでプロパティ値を区切る区切り文字を指定します。デフォルト値はスペースバーです。
Encoding
(Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding) IIS *.log ファイルの文字エンコード。デフォルト値は UTF8 です。
コマンドレットは、次のプロパティを持つパイプライン オブジェクトに出力します。
DateTime
(System.DateTime) ログの「日付」と「時刻」の値を組み合わせたもの。
ClientHost
(System.Net.IpAddress) ログの「c-ip」値。
UserName
(文字列または匿名ユーザーの場合は $null) ログの「cs-username」値。
Service
(文字列) ログの「s-sitename」値。
Machine
(文字列) ログの「s-computername」値。
ServerIp
(System.Net.IpAddress) ログの「s-ip」値。
ServerPort
(int) ログの「s-port」値。
Method
(文字列) ログの「cs-method」値。
ScriptPath
(文字列) System.Web.HttpUtility.UrlDecode でデコードされたログの「cs-uri-stem」値。
QueryString
(クエリ文字列のない HTTP 要求の文字列または $null) System.Web.HttpUtility.UrlDecode でデコードされたログの「cs-uri-query」値。
ServiceStatus
(int) ログの「sc-status」値。
ServiceSubStatus
(int) ログの「sc-substatus」値。
Win32Status
(int) ログの「sc-win32-status」値。
BytesSent
(System.UInt64) ログの「sc-bytes」値。
BytesRecived
(System.UInt64) ログの「cs-bytes」値。
ProcessingTime
(int) ログの「所要時間」の値。
ProtocolVersion
(文字列) ログの「cs-version」値。
Host
(Host ヘッダーのない HTTP 要求の場合は $null の文字列) ログの「cs-host」値。
UserAgent
(User-Agent ヘッダーのないリクエストの場合は文字列または $null) ログの「cs(User-Agent)」値。
Cookie
(Cookie を使用しないリクエストの場合は文字列または $null) ログの「cs(Cookie)」値。
Referer
(リファラーのないリクエストの場合は文字列または $null) System.Web.HttpUtility.UrlDecode でデコードされたログの「cs(Referer)」値。
param
(
[Parameter(
Mandatory=$true,
Position = 0,
ValueFromPipeline=$true,
HelpMessage="Specifies the path to the IIS *.log file to import. You can also pipe a path to Import-Iss-Log."
)]
[ValidateNotNullOrEmpty()]
[string]
$Path,
[Parameter(
Position = 1,
HelpMessage="Specifies the delimiter that separates the property values in the IIS *.log file. The default is a spacebar."
)]
[ValidateNotNullOrEmpty()]
[string]
$Delimiter = " ",
[Parameter(HelpMessage="The character encoding for the IIS *log file. The default is the UTF8.")]
[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]
$Encoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::UTF8
)
begin
{
$fieldNames = @()
$output = New-Object Object
Add-Member -InputObject $output -MemberType NoteProperty -Name "DateTime" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ClientHost" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "UserName" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Service" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Machine" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ServerIp" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ServerPort" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Method" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ScriptPath" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "QueryString" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ServiceStatus" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ServiceSubStatus" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Win32Status" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "BytesSent" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "BytesRecived" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ProcessingTime" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "ProtocolVersion" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Host" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "UserAgent" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Cookie" -Value $null
Add-Member -InputObject $output -MemberType NoteProperty -Name "Referer" -Value $null
}
process
{
foreach($line in Get-Content -Path $Path -Encoding $Encoding)
{
if($line.StartsWith("#Fields: "))
{
$fieldNames = @($line.Substring("#Fields: ".Length).Split($Delimiter));
}
elseif(-not $line.StartsWith("#"))
{
$fieldValues = @($line.Split($Delimiter));
for($i = 0; $i -lt $fieldValues.Length; $i++)
{
$name = $fieldNames[$i]
$value = $fieldValues[$i]
switch($name)
{
"date" { $output.DateTime = [DateTime]::Parse($value) }
"time" { $output.DateTime += [TimeSpan]::Parse($value) }
"c-ip" { $output.ClientHost = [System.Net.IPAddress]::Parse($value) }
"cs-username" { $output.UserName = if($value -eq '-') { $null } else { $value } }
"s-sitename" { $output.Service = $value }
"s-computername" { $output.Machine = $value }
"s-ip" { $output.ServerIp = [System.Net.IPAddress]::Parse($value) }
"s-port" { $output.ServerPort = [int]$value }
"cs-method" { $output.Method = $value }
"cs-uri-stem" { $output.ScriptPath = [System.Web.HttpUtility]::UrlDecode($value) }
"cs-uri-query" { $output.QueryString = if($value -eq '-') { $null } else { [System.Web.HttpUtility]::UrlDecode($value) } }
"sc-status" { $output.ServiceStatus = [int]$value }
"sc-substatus" { $output.ServiceSubStatus = [int]$value }
"sc-win32-status" { $output.Win32Status = [BitConverter]::ToInt32([BitConverter]::GetBytes([UInt32]($value)), 0) }
"sc-bytes" { $output.BytesSent = [UInt64]$value }
"cs-bytes" { $output.BytesRecived = [UInt64]$value }
"time-taken" { $output.ProcessingTime = [int]$value }
"cs-version" { $output.ProtocolVersion = $value }
"cs-host" { $output.Host = if($value -eq '-') { $null } else { $value } }
"cs(User-Agent)" { $output.UserAgent = if($value -eq '-') { $null } else { $value } }
"cs(Cookie)" { $output.Cookie = if($value -eq '-') { $null } else { $value } }
"cs(Referer)" { $output.Referer = if($value -eq '-') { $null } else { [System.Web.HttpUtility]::UrlDecode($value) } }
}
}
Write-Output $output
}
}
}
ソース: https://web.archive.org/web/20170430094952/https://poshcode.org/2574