Ошибка Logparser при использовании с PowerShell

Я пытаюсь использовать Log Parser в PowerShell для экспорта файла журнала Windows Evtx в CSV:

$logparser = "c:\program files (x86)\Log Parser 2.2\logparser.exe"
$allArgs = ("SELECT * INTO c:\logs\logs.csv FROM c:\logs\logs.evtx", "-i:evt", "-o:csv")
$ps = Start-Process -FilePath $logparser -ArguementList $allArgs -Wait -Passthru -NoNewWindow;
$ps.WaitForExit()
$ps.ExitCode;

Но когда я запускаю это, я получаю сообщение об ошибке:

Ошибка: обнаружен лишний аргумент "*" после запроса

Код ошибки — 13. Я попытался поместить пути в одинарные кавычки и запустить его из того же каталога, что и журналы, но он продолжает возвращать ту же ошибку.


person smwk    schedule 14.06.2016    source источник
comment
$allArgs = @('SELECT * INTO c:\logs\logs.csv FROM c:\logs\logs.evtx -i:evt -o:csv') работает?   -  person whatever    schedule 14.06.2016
comment
К сожалению, нет, я пробовал несколько способов, но он всегда возвращается с той же ошибкой,   -  person smwk    schedule 14.06.2016


Ответы (1)


Вам нужно сохранить двойные кавычки вокруг строки запроса, иначе она не будет распознана как один аргумент порожденным процессом.

Помещение строки запроса (с двойными кавычками) в одинарные кавычки может сработать:

$allArgs = '"SELECT * INTO c:\logs\logs.csv FROM c:\logs\logs.evtx"',
           "-i:evt",
           "-o:csv"

Однако гораздо более простым решением проблемы было бы полностью отказаться от Start-Process и вместо этого использовать оператор вызова (&):

$logparser = "c:\program files (x86)\Log Parser 2.2\logparser.exe"
$query = "SELECT * INTO c:\logs\logs.csv FROM c:\logs\logs.evtx"

& $logparser -i:evt -o:csv $query
person Ansgar Wiechers    schedule 14.06.2016
comment
Спасибо, я выбрал второй вариант, и он отлично сработал. - person smwk; 14.06.2016