7 votes

Arguments Powershell et logparser

J'essaie d'exécuter des commandes de logparser à partir de powershell mais j'ai des problèmes pour faire passer les arguments correctement, voici l'extrait de mon script ;

d : \scripting\smtplogs\logparser\logparser.exe "SELECT TOP 50 Receveur, 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 : "Récepteurs pour les messages NULL TOUS pour %DateGraph%"

J'ai lu des tas de choses sur l'encapsulation des arguments, mais je n'arrive pas à trouver comment faire pour que cela fonctionne !

Toute aide que vous pourriez apporter serait très appréciée.

Gracias

5voto

Sung Points 9172

Pour un paramètre de chaîne complexe, essayez de passer l'argument en utilisant powershell ficelles ici afin que vous n'ayez pas à vous soucier de l'échappement des guillemets simples/doubles.

UPDATE1 : Je n'ai pas réussi à faire fonctionner le fomratting donc voici la capture d'écran. alt text

UPDATE2 : J'ai enfin réussi à 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 de la chaîne ici. @" y "@ .

1voto

Keith Hill Points 776

Pour information, si vous n'avez pas besoin d'une expansion de variable PowerShell, il est préférable d'utiliser des chaînes de caractères entre guillemets. Par exemple, la chaîne suivante, entre guillemets, peut vous causer quelques soucis :

@"
$(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 se résoudrait à rien, c'est-à-dire qu'il disparaîtrait de la chaîne originale. Sauf, bien sûr, si $f a été défini et mis à une valeur autre que null ou empty.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X