Ваша команда не так уж плоха и намного эффективнее, чем ответ @ Lee_Dailey,
необходимо удалить только $_.
перед [datetime]
(и -le должно быть -gt),
но для сравнения используется только дата.
Предполагается, что вы хотите сравнить все элементы даты, включая доли секунд:
## Q:\Test\2018\11\20\SO_53398055.ps1
$File = '.\SO_53398055.log'
$dtFormat = 'yyyy-MM-dd HH:mm:ss,FFF'
$logDate = [datetime]::ParseExact('2018-11-20 15:45:58,018',$dtFormat,$Null)
Get-Content -Path $file -Tail 100 |
Where-Object {[datetime]::ParseExact( ($_.split('[')[0]).Trim(), $dtFormat,$Null) -gt $logDate}
Где Where выглядит немного многолюдно, потому что яиспользуйте [
, чтобы разделить строку ввода, а затем необходимо обрезать завершающий пробел.
Мой выбранный logDate
находится между 1-й и 2-й записями журнала и, как ваш текст говорит only logs which are greater than a set system date
отклоняется от вашего кода, который сравнивает меньшеили даже я ожидаю этот вывод
> Q:\Test\2018\11\20\SO_53398055.ps1
2018-11-20 15:45:58,021 [No|SeSt] [2] [Session#-2,Username=2] INFO is running
2018-11-20 15:45:58,031 [No|SeSt] [3] [Session#-3,Username=3] INFO is running