Разбор MDT Log с помощью PowerShell - PullRequest
       28

Разбор MDT Log с помощью PowerShell

0 голосов
/ 09 октября 2018

Я пытаюсь настроить журнал, который будет извлекать другую информацию из другого файла журнала для регистрации ресурсов, собранных MDT с помощью PowerShell.Я могу извлечь строку журнала, используя простые get-content | select-string, чтобы получить нужные мне строки, поэтому выходные данные выглядят так:

[LOG [Проверка учетных данных домена [домен \ пользователь]] LOG]!time = "16: 55: 42.000 + 000" date = "10-20-2017" component = "Wizard" context = "" type = "1" thread = "" file = "Wizard"

и мне любопытно, есть ли способ записи таких вещей, как домен \ пользователь, время и дата, в отдельные переменные, чтобы впоследствии их можно было передать с другими данными, полученными аналогичным образом, в выходном файле в одну строку.

1 Ответ

0 голосов
/ 09 октября 2018

Вот как вы могли бы это сделать:

$line = Get-Content "<your_log_path>" | Select-String "Validate Domain Credentials" | select -First 1
$regex = '\[(?<domain>[^\\[]+)\\(?<user>[^]]+)\].*time="(?<time>[^"]*)".*date="(?<date>[^"]*)".*component="(?<component>[^"]*)".*context="(?<context>[^"]*)".*type="(?<type>[^"]*)".*thread="(?<thread>[^"]*)".*file="(?<file>[^"]*)"'
if ($line -match $regex) {
    $user = $Matches.user
    $date = $Matches.date
    $time = $Matches.time
    # ... now do stuff with your variables ...
}

Возможно, вы захотите встроить некоторую проверку ошибок и т. Д. (Например, когда строка не найдена или не совпадает и т. Д.)

Также вы можете значительно упростить регулярное выражение, если вам нужны только эти 3 значения.Я разработал его так, чтобы все поля из строки были включены.

Кроме того, вы можете преобразовать значения в более подходящие типы, что (в зависимости от того, что вы хотите с ними делать впоследствии) может упростить их обработку:

$type = [int]$Matches.type
$credential = New-Object System.Net.NetworkCredential($Matches.user, $null, $Matches.domain)
$datetime = [DateTime]::ParseExact(($Matches.date + $Matches.time), "MM-dd-yyyyHH:mm:ss.fff+000", [CultureInfo]::InvariantCulture)
...