Вопрос

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

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

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

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

Спасибо

Это было полезно?

Решение

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

ОБНОВЛЕНИЕ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%
"@

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top