Ваш вызов Split()
использует соглашения C # для экранирования t
для указания символа табуляции. В PowerShell вы используете один обратный удар, например, $_.Split("`t")
. Кроме того, -match
ведет себя немного по-другому в массиве, как этот, поэтому он должен работать с каждой отдельной строкой, например, так:
Get-Content $logFile | Foreach {$_.Split("`t")} | Where { $_ -match $pattern }
Здесь также есть своего рода скрытый трюк с Get-Content, где вы можете получить его для разделения:
Get-Content $logFile -del "`t" | Where { $_ -match $pattern }
Обновление: на основе обновленного вопроса попробуйте что-то вроде этого:
gc $logFile | % {$cols = $_.Split("`t"); if ($cols[2] -match $pattern) {$cols[1]}}
Помните, что массивы основаны на 0 в PowerShell. Если текст уже в формате DateTime, который понимают PowerShell / .NET, вы можете просто преобразовать его в DateTime, например [DateTime]$cols[1]
.