Аргументы Powershell и logparser - PullRequest
7 голосов
/ 09 марта 2009

Я пытаюсь запустить некоторые команды logparser из powershell, но у меня возникают проблемы с правильной передачей аргументов, вот выдержка из моего скрипта;

d: \ scripting \ smtplogs \ logparser \ logparser.exe "ВЫБЕРИТЕ ТОП 50 Приемник, СЧЕТ () В% TMPOutput% \ TopReceiversNDRALL.gif ОТ% TempDir% \ PostAll.log ГДЕ отправитель LIKE '<>' И получателю не нравится '%% go-fmtopper %%' GROUP BY Получателю ЗАКАЗАТЬ ПО СЧЕТУ () DESC "-i: TSV -iSeparator: space -headerRow: OFF -iHeaderFile:" header3.tsv "-lineFilter:" +10 «. -o: CHART -chartType: ColumnClustered -config: MyScript.js -chartTitle: «Получатели для пустых сообщений ВСЕ для% DateGraph%»

Я прочитал множество статей об инкапсуляции аргументов, но, похоже, не могу понять, как заставить это работать!

Любая помощь, которую вы, ребята, могли бы оказать, была бы очень признательна.

Спасибо

Ответы [ 2 ]

5 голосов
/ 09 марта 2009

Для сложного строкового параметра попробуйте передать аргумент используя powershell here-strings , чтобы вам не пришлось беспокоиться о экранировании одинарных / двойных кавычек

ОБНОВЛЕНИЕ1 : Я не смог заставить работать фомратинг, вот скриншот. alt text

ОБНОВЛЕНИЕ2 : мне удалось окончательно отформатировать код.

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%
"@

Убедитесь, что вы добавили новую строку между именами строковых строк @ " и " @ .

1 голос
/ 22 марта 2009

К вашему сведению, если вам не нужно расширение переменных PowerShell, лучше использовать строки, заключенные в одинарные кавычки. Например, следующая строка в двойных кавычках может вызвать у вас некоторое горе:

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

, где следующее безвредно:

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

Маловероятно, что ваша строка здесь будет содержать что-то столь очевидное, но простой $ f ничего не решит, то есть он исчезнет из исходной строки. Если, конечно, $ f не был определен и ему присвоено значение, отличное от нуля или пустого.

...