7

私は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 メッセージの受信者"

引数のカプセル化について読みましたが、これを機能させる方法がわかりません!

皆さんが提供できるどんな助けも大歓迎です。

ありがとう

4

2 に答える 2

5

複雑な文字列パラメーターの場合は、powershell here-stringsを使用して引数を渡すようにしてください。これにより、一重引用符または二重引用符のエスケープについて心配する必要がなくなります。

UPDATE1 : フォームラッティングを機能させることができなかったので、スクリーンショットを次に示します。 代替テキスト

UPDATE2 : ようやくコードをフォーマットできました。

d:\scripting\smtplogs\logparser\logparser.exe @"
SELECT TOP 50 レシーバー、COUNT()
INTO %TMPOutput%\TopReceiversNDRALL.gif
FROM %TempDir%\PostAll.log
WHERE 送信者のような ''
      AND レシーバー NOT LIKE '%%go-fmtopper%%'
GROUP BY レシーバー
COUNT() DESC で並べ替え"
-i:TSV
-iSeparator:スペース
-headerRow:OFF
-iHeaderFile:"header3.tsv"
-lineFilter:"+10."
-o:チャート
-chartType:ColumnClustered
-config:MyScript.js
-chartTitle:"%DateGraph% のすべての NULL メッセージの受信者
"@

here-string モニカ@""@の間に新しい行を必ず追加してください。

于 2009-03-09T12:43:10.907 に答える
1

参考までに、PowerShell変数の拡張が必要な​​い場合は、ここで引用符で囲まれた文字列を使用することをお勧めします。たとえば、ここで二重引用符で囲まれた次の文字列は、いくつかの悲しみを引き起こす可能性があります。

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

ここで、以下は無害です。

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

here文字列にそれほど明白なものが含まれている可能性は低いですが、単純な$ fは何にも解決されません。つまり、元の文字列から消えます。もちろん、$ fが定義され、nullまたは空以外に設定されていない限り。

于 2009-03-22T07:03:15.623 に答える