1778682052
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
```
|
||||
param(
|
||||
[Parameter(Mandatory = $true, Position = 0)]
|
||||
[string]$InputFile,
|
||||
|
||||
[Parameter(Mandatory = $true, Position = 1)]
|
||||
[string]$Domain,
|
||||
|
||||
[Parameter(Position = 2)]
|
||||
[string]$OutputFile,
|
||||
|
||||
[switch]$MatchAnywhere
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
function Resolve-LogPath {
|
||||
param([string]$Path)
|
||||
|
||||
if (Test-Path -LiteralPath $Path -PathType Leaf) {
|
||||
return (Resolve-Path -LiteralPath $Path).Path
|
||||
}
|
||||
|
||||
if ([System.IO.Path]::GetExtension($Path) -eq '') {
|
||||
$pathWithLogExtension = "$Path.log"
|
||||
if (Test-Path -LiteralPath $pathWithLogExtension -PathType Leaf) {
|
||||
return (Resolve-Path -LiteralPath $pathWithLogExtension).Path
|
||||
}
|
||||
}
|
||||
|
||||
throw "Input file not found: $Path"
|
||||
}
|
||||
|
||||
function Test-CdnLogDomain {
|
||||
param(
|
||||
[string]$Line,
|
||||
[string]$ExpectedDomain
|
||||
)
|
||||
|
||||
$firstTab = $Line.IndexOf("`t")
|
||||
if ($firstTab -lt 0) { return $false }
|
||||
|
||||
$secondTab = $Line.IndexOf("`t", $firstTab + 1)
|
||||
if ($secondTab -lt 0) { return $false }
|
||||
|
||||
$thirdTab = $Line.IndexOf("`t", $secondTab + 1)
|
||||
if ($thirdTab -lt 0) { return $false }
|
||||
|
||||
$fourthTab = $Line.IndexOf("`t", $thirdTab + 1)
|
||||
if ($fourthTab -lt 0) { return $false }
|
||||
|
||||
$lineDomain = $Line.Substring($thirdTab + 1, $fourthTab - $thirdTab - 1)
|
||||
return [string]::Equals($lineDomain, $ExpectedDomain, [System.StringComparison]::OrdinalIgnoreCase)
|
||||
}
|
||||
|
||||
$resolvedInputFile = Resolve-LogPath -Path $InputFile
|
||||
$inputDirectory = Split-Path -Parent $resolvedInputFile
|
||||
$inputBaseName = [System.IO.Path]::GetFileNameWithoutExtension($resolvedInputFile)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($OutputFile)) {
|
||||
$OutputFile = Join-Path $inputDirectory "$inputBaseName`_$Domain"
|
||||
}
|
||||
|
||||
$reader = [System.IO.StreamReader]::new($resolvedInputFile)
|
||||
$writerEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
$writer = [System.IO.StreamWriter]::new($OutputFile, $false, $writerEncoding)
|
||||
|
||||
$totalCount = 0L
|
||||
$matchedCount = 0L
|
||||
|
||||
try {
|
||||
while (($line = $reader.ReadLine()) -ne $null) {
|
||||
$totalCount++
|
||||
|
||||
if ($MatchAnywhere) {
|
||||
$matched = $line.IndexOf($Domain, [System.StringComparison]::OrdinalIgnoreCase) -ge 0
|
||||
}
|
||||
else {
|
||||
$matched = Test-CdnLogDomain -Line $line -ExpectedDomain $Domain
|
||||
}
|
||||
|
||||
if ($matched) {
|
||||
$writer.WriteLine($line)
|
||||
$matchedCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$writer.Dispose()
|
||||
$reader.Dispose()
|
||||
}
|
||||
|
||||
Write-Host "Input file: $resolvedInputFile"
|
||||
Write-Host "Output file: $OutputFile"
|
||||
Write-Host "Total lines: $totalCount"
|
||||
Write-Host "Matched lines: $matchedCount"
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user