2009-03-09 15 views
7

En essayant d'exécuter des commandes logparser à partir de powershell mais j'ai des problèmes avec le passage correct des arguments, voici l'extrait de mon script;arguments Powershell et logparser

d: \ scripts \ smtplogs \ logparser \ LogParser.exe « SELECT TOP 50 récepteur, COUNT () EN% TMPOutput% \ TopReceiversNDRALL.gif% à partir de TempDir% \ PostAll.log OÙ Sender LIKE '<>' ET Receiver PAS COMME '%% go-fmtopper %%' GROUP BY Récepteur ORDER BY COUNT () DESC "-i: TSV -iSeparator: espace -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 charges sur l'encapsulation des arguments 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

+0

+1 - Je ne sais pas pourquoi cela a été rejeté, semble être une bonne question pour moi ... Fellow Andy à la recherche d'autres Andys –

+0

Ouais, il m'a intrigué, je sais que c'est abit d'une question noob mais c'est ennuyeux la vie hors de moi! –

+0

+1 Oui, je considère que c'est une question valide car il est parfois assez difficile de passer une chaîne avec beaucoup de guillemets simples/doubles. – Sung

Répondre

5

Pour un paramètre de chaîne complexe, essayez de passer l'argument en utilisant Powershell here-strings de sorte que vous ne seriez pas à vous soucier de s'échapper simples/doubles guillemets

Update1: Je ne pourrais pas N'obtenez pas le travail fomratting alors voici la capture d'écran. alt text

MAJ2: J'ai pu formater le code finalement.

 
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 que vous ajoutez une nouvelle ligne entre les pseudos ici-string @ " et " @.

+0

Comme toujours mate, tu l'as craqué, je n'avais même pas entendu parler d'ici-cordes! Merci encore! –

+0

Ah, heureux d'entendre que j'étais capable de propager le pouvoir des cordes auditives. C'est génial de propager les fonctionnalités de powershell;) – Sung

1

FYI, si vous n'avez pas besoin d'une extension de la variable PowerShell, il est préférable d'utiliser des chaînes à guillemets simples. Par exemple la double cité chaîne ici suivante pourrait vous causer une douleur:

@" 
$(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 contiendrait quelque chose de si évident mais un simple $ f ne résoudrait rien, c'est-à-dire qu'il disparaîtrait de la chaîne d'origine. À moins, bien sûr, que $ f ait été défini et défini sur autre chose que null ou vide.