我试图从powershell运行一些logparser命令但是我遇到了正确传递参数的问题,这是我脚本中的例外情况;
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:“%DateGraph%的NULL消息的接收者”
我已阅读有关封装参数的内容,但似乎无法弄清楚如何使其工作!
非常感谢你们提供的任何帮助。
由于
答案 0 :(得分:5)
对于复杂的字符串参数,尝试使用powershell here-strings传递参数,这样您就不必担心转义单引号/双引号
UPDATE1 :我无法完成工作,所以这里是截图。
UPDATE2 :我最终能够格式化代码。
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% "@
确保在here-string标记 @“和”@ 之间添加新行。
答案 1 :(得分:1)
仅供参考,如果您不需要任何PowerShell变量扩展,那么最好使用单引号字符串。例如,以下双引号字符串可能会让您感到悲伤:
@"
$(get-process <some_core_os_process> | stop-process)
"@
以下内容无害:
@'
$(get-process <some_core_os_process> | stop-process)
'@
你的here字符串不太可能包含如此明显的东西,但是简单的$ f会解析为什么,即它会从原始字符串中消失。当然,除非定义$ f并将其设置为null或empty以外的其他内容。