2009-03-09 11 views
7

Próbuję uruchomić niektóre polecenia logparser z powershell, ale mam problemy z prawidłowym przekazywaniem argumentów, heres excert z mojego skryptu;Argumenty Powershell i logparser

d: \ skryptowy \ smtplogs \ LogParser \ logparser.exe „SELECT TOP 50 odbiornika, COUNT () do% TMPOutput% \ TopReceiversNDRALL.gif z% TempDir% \ PostAll.log GDZIE nadawcy JAK '<>' I Odbiornik NIE LIKI '%% go-fmtopper %%' GROUP BY Odbiornik ZAMÓW PRZEZ LICZBĘ () DESC "-i: TSV -iSeparator: space -headerRow: OFF -iHeaderFile:" header3.tsv "-lineFilter:" + 10. " -o: CHART -chartType: ColumnClustered -config: MyScript.js -chartTitle: "Odbiorniki dla komunikatów NULL WSZYSTKIE dla% DateGraph%"

Czytałem mnóstwo informacji o enkapsulacji argumentów, ale nie potrafię wymyślić, jak to działa!

Każda pomoc, którą moglibyście zapewnić, byłaby bardzo doceniana.

Dzięki

+0

+1 - Nie jestem pewna, dlaczego to zostało odrzucone, wydaje się dla mnie dobrym pytaniem ... Fellow Andy szukał innych Andów –

+0

Tak, to mnie zaintrygowało, znam jego odrobinę noobu, ale denerwujące życie ze mnie! –

+0

+1 Tak, uważam to za słuszne pytanie, ponieważ czasami jest to dość kłopotliwe, jak przekazać ciąg znaków z wieloma pojedynczymi/podwójnymi cudzysłowami. – Sung

Odpowiedz

5

Dla złożonego parametru ciąg, starają się przekazać argument za pomocą PowerShell here-strings, dzięki czemu nie będzie musiał martwić się o ucieczce single/cudzysłowach

UPDATE1: Nie mogłam nie dostaniesz fomratacji, więc oto zrzut ekranu. alt text

Update2: Udało mi się w końcu formatowania kodu.

 
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% 
"@ 

Upewnij się, że dodać nową linię między monikers tutaj-strunowych @ " i " @.

+0

Jak zawsze kolego, złamałeś to, nawet nie słyszałem o tutaj-stringach! Dzięki jeszcze raz! –

+0

Ach, cieszę się, słysząc, że udało mi się rozłożyć moc dźwięków smyczkowych. Wspaniale jest rozpowszechniać funkcje PowerShell;) – Sung

1

FYI, jeśli nie potrzebujesz żadnych rozszerzeń zmiennych PowerShell, to lepiej jest użyć pojedynczego cudzysłowu tutaj łańcuchów. Na przykład następujące podwójnie cytowany tu łańcuch może powodować ci żal:

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

gdzie po to nieszkodliwe:

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

Jest mało prawdopodobne, Twój tutaj ciąg będzie zawierać coś tak oczywistego, ale prosty $ f ustąpiłoby niczemu, tj. zniknęłoby z oryginalnego napisu. O ile oczywiście $ f nie został zdefiniowany i ustawiony na coś innego niż zero lub puste.