Arguments Powershell et Logparser
-
05-07-2019 - |
Question
J'essaie d'exécuter des commandes logparser à partir de powershell, mais j'ai des problèmes pour transmettre correctement les arguments, voici l'extrait de mon script;
d: \ scripting \ smtplogs \ logparser \ logparser.exe " Récepteur SELECT TOP 50, COUNT () DANS% TMPOutput% \ TopReceiversNDRALL.gif FROM% TempDir% \ PostAll.log WHERE Sender LIKE '< >' ET Le récepteur ne ressemble pas à '%% go-fmtopper %%' GROUPE PAR Récepteur ORDER BY COUNT () DESC & Quot; -i: TSV -iSeparator: space -headerRow: OFF -iHeaderFile: & "; header3.tsv &"; -lineFilter: " +10. " -o: CHART -chartType: ColumnClustered -config: MyScript.js -chartTitle: " Récepteurs pour les messages NULL ALL pour% DateGraph% "
J'ai lu des tonnes d'articles sur les arguments d'encapsulation, mais je n'arrive pas à comprendre comment faire pour que cela fonctionne!
Toute aide que vous pourriez fournir serait très appréciée.
Merci
La solution
Pour un paramètre de chaîne complexe, essayez de passer l'argument à l'aide de powershell here-strings afin que vous ne craigniez pas d'échapper aux guillemets simples / doubles
UPDATE1 : Je n’arrivais pas à faire fonctionner le formatage, voici la capture d’écran.
UPDATE2 : J'ai finalement pu formater le code.
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% "@
Assurez-vous d'ajouter une nouvelle ligne entre les monikers @ & "; et &" @ . .
.Autres conseils
Pour votre information, si vous n'avez besoin d'aucune extension de variable PowerShell, il est préférable d'utiliser des chaînes entre guillemets simples ici. Par exemple, la chaîne double entre guillemets peut vous causer des problèmes:
@"
$(get-process <some_core_os_process> | stop-process)
"@
où ce qui suit est inoffensif:
@'
$(get-process <some_core_os_process> | stop-process)
'@
Il est peu probable que votre chaîne ici contienne quelque chose d'aussi évident, mais un simple $ f ne résoudrait rien, c'est-à-dire qu'elle disparaîtrait de la chaîne d'origine. Sauf si, bien sûr, $ f a été défini et défini sur autre chose que null ou vide.