【问题标题】:Powershell and logparser argumentsPowershell 和 logparser 参数
【发布时间】:2010-10-12 02:57:30
【问题描述】:

我正在尝试从 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:"NULL 消息的接收者 ALL for %DateGraph%"

我已经阅读了大量关于封装参数的文章,但似乎无法弄清楚如何进行这项工作!

如果你们能提供任何帮助,我们将不胜感激。

谢谢

【问题讨论】:

  • +1 - 不知道为什么这被否决了,这对我来说似乎是一个很好的问题......安迪同胞正在寻找其他安迪
  • 是的,这让我很困惑,我知道这有点像菜鸟问题,但它让我很烦!
  • +1 是的,我认为这是一个有效的问题,因为有时如何传递一个包含大量单/双引号的字符串非常令人困惑。

标签: powershell arguments logparser


【解决方案1】:

对于复杂的字符串参数,尝试使用 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 消息的接收者 “@

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

【讨论】:

  • 和往常一样,你已经破解了它,我什至没有听说过here-strings!再次感谢!
  • 啊,很高兴听到我能够传播听弦的力量。传播 powershell 的功能很棒;)
【解决方案2】:

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

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

以下内容是无害的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多