Мой быстрый и грязный подход к чтению этих журналов в PowerShell использует пользовательскую функцию.В основном это просто вопрос использования ConvertFrom-CSV
и манипулирования первыми несколькими строками формата файла журнала IIS для удовлетворения ожиданий командлетов.
function ConvertIISLogFrom-CSV{
[cmdletbinding()]
param(
[parameter(ValueFromPipelineByPropertyName=$true, Mandatory=$true)]
[Alias("FullName")]
[string]$File
)
process{
Get-Content $file | Where-Object{$_ -notmatch "^#[DSV]"} | ForEach-Object{$_ -replace '^#Fields: '} | ConvertFrom-Csv -Delimiter " "
}
}
Get-ChildItem $path -Filter "ex*" |
Sort-Object creationdate -Descending |
Select -Last 1 |
ConvertIISLogFrom-CSV |
Where-Object {$_."cs-username" -eq "username" -and $_."x-fullpath" -like "*error*"} |
Select-Object date,time,"c-ip","cs-username","x-session","x-fullpath" |
Format-Table -AutoSize
Командлет будет считывать файл и эффективно отбрасывать первые несколькостроки комментариев.Мы намеренно оставляем строку #fields от начального фильтра, поскольку она содержит заголовок столбца.После того, как мы просто избавимся от #fields, что оставляет нам правильный формат CSV.
Используя вышеизложенное, вы можете просто изменить $path
на местоположение, содержащее журналы.Далее следует пример, демонстрирующий интеграцию с другими фильтрами PowerShell и командлетами.
Поскольку мы создаем объекты PowerShell, вы можете использовать любые параметры экспорта, которые вам нравятся, с данными.Труба в Export-CSV
, и вы готовы идти.