7

我试图从powershell运行一些logparser命令,但我在正确传递参数时遇到问题,这是我脚本中的excert;

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:"NULL 消息的接收者 ALL for %DateGraph%"

我已经阅读了有关封装参数的大量内容,但似乎无法弄清楚如何使这项工作!

你们可以提供的任何帮助将不胜感激。

谢谢

4

2 回答 2

5

对于复杂的字符串参数,尝试使用 powershell here-strings传递参数,这样您就不必担心转义单/双引号

UPDATE1:我无法让格式正常工作,所以这里是屏幕截图。 替代文字

UPDATE2:我终于可以格式化代码了。

d:\scripting\smtplogs\logparser\logparser.exe @"
选择 TOP 50 接收者,COUNT()
INTO %TMPOutput%\TopReceiversNDRALL.gif
FROM %TempDir%\PostAll.log
WHERE 发件人喜欢 ''
      AND Receiver NOT LIKE '%%go-fmtopper%%'
按接收方分组
ORDER BY COUNT() DESC"
-i:TSV
-i分隔符:空格
-headerRow:关闭
-iHeaderFile:“header3.tsv”
-lineFilter:“+10。”
-o:图表
-chartType:ColumnClustered
-config:MyScript.js
-chartTitle:"%DateGraph% 的 NULL 消息的接收者
“@

确保在此处的字符串名字对象@""@之间添加一个新行。

于 2009-03-09T12:43:10.907 回答
1

仅供参考,如果您不需要任何 PowerShell 变量扩展,那么您最好在此处使用单引号字符串。例如,下面的双引号字符串可能会让你有些悲伤:

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

以下是无害的:

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

您的此处字符串不太可能包含如此明显的内容,但简单的 $f 将解决任何问题,即它将从原始字符串中消失。当然,除非 $f 被定义并设置为 null 或空以外的值。

于 2009-03-22T07:03:15.623 回答