Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell and logparser arguments

Im trying to run some logparser commands from powershell but Im having issues with passing the arguments across correctly, heres the excert from my script;

d:\scripting\smtplogs\logparser\logparser.exe "SELECT TOP 50 Receiver, COUNT() INTO %TMPOutput%\TopReceiversNDRALL.gif FROM %TempDir%\PostAll.log WHERE Sender LIKE '<>' AND Receiver NOT LIKE '%%go-fmtopper%%' GROUP BY Receiver ORDER BY COUNT() DESC" -i:TSV -iSeparator:space -headerRow:OFF -iHeaderFile:"header3.tsv" -lineFilter:"+10." -o:CHART -chartType:ColumnClustered -config:MyScript.js -chartTitle:"Receivers for NULL messages ALL for %DateGraph%"

Ive read loads about encapsulating arguments but cant seem to figure out how to make this work!

Any help that you guys could provide would be very appreciated.

Thanks

like image 486
Andy Walker Avatar asked Mar 09 '09 05:03

Andy Walker


2 Answers

For a complex string parameter, try to pass the argument using powershell here-strings so that you wouldn't have to worry about escaping single/double quotes

UPDATE1: I couldn't get the fomratting working so here is the screenshot. alt text

UPDATE2: I was able to format the code finally.

d:\scripting\smtplogs\logparser\logparser.exe @"
SELECT TOP 50 Receiver, COUNT() 
INTO %TMPOutput%\TopReceiversNDRALL.gif 
FROM %TempDir%\PostAll.log 
WHERE Sender LIKE '' 
      AND Receiver NOT LIKE '%%go-fmtopper%%' 
GROUP BY Receiver 
ORDER BY COUNT() DESC" 
-i:TSV 
-iSeparator:space 
-headerRow:OFF 
-iHeaderFile:"header3.tsv" 
-lineFilter:"+10." 
-o:CHART 
-chartType:ColumnClustered 
-config:MyScript.js 
-chartTitle:"Receivers for NULL messages ALL for %DateGraph%
"@

Make sure that you add a new line between the here-string monikers @" and "@.

like image 100
dance2die Avatar answered Nov 05 '22 03:11

dance2die


FYI, if you don't need any PowerShell variable expansion then you are better off using single quoted here strings. For example the following double quoted here string might cause you some grief:

@"
$(get-process <some_core_os_process> | stop-process)
"@

where the following is harmless:

@'
$(get-process <some_core_os_process> | stop-process)
'@

It's not likely your here string would contain something so obvious but a simple $f would resolve to nothing i.e. it would disappear from the original string. Unless, of course, $f was defined and set to something other than null or empty.

like image 44
Keith Hill Avatar answered Nov 05 '22 03:11

Keith Hill