2009-03-09 12 views
7

Estoy tratando de ejecutar algunos comandos de logparser de powershell pero estoy teniendo problemas para pasar los argumentos correctamente, aquí está el excert de mi script;argumentos Powershell y logparser

d: \ scripts \ smtplogs \ LogParser \ LogParser.exe "SELECT TOP 50 receptor, COUNT () EN% TMPOutput% \ TopReceiversNDRALL.gif de% TEMPDIR% \ PostAll.log DONDE COMO Remitente '<>' Y Receptor NO ME GUSTA '%% go-fmtopper %%' GRUPO POR Receptor ORDEN POR CUENTA () DESC "-i: TSV -iSeparator: espacio -headerRow: OFF -iHeaderFile:" header3.tsv "-lineFilter:" + 10. " -o: CHART -chartType: ColumnClustered -config: MyScript.js -chartTitle: "Receptores para mensajes NULL TODO para% DateGraph%"

He leído mucho sobre encapsular argumentos pero no puedo entender cómo hacerlo funcionar.

Cualquier ayuda que ustedes puedan proporcionar sería muy apreciada.

Gracias

+0

+1 - No estoy seguro de por qué esto fue rechazado, parece una buena pregunta para mí ... Compañero Andy buscando otro Andys –

+0

Sí me desconcertó, sé que es una pregunta novata, pero es molesto la vida ¡fuera de mi! –

+0

+1 Sí, considero que esta es una pregunta válida, ya que a veces resulta bastante desconcertante la forma de pasar una cadena con muchas comillas simples/dobles. – Sung

Respuesta

5

Para un parámetro de cadena compleja, tratar de pasar el argumento utilizando PowerShell here-strings de modo que usted no tiene que preocuparse de escapar comillas dobles/dobles

Update1: No podría Entorno de trabajo, así que aquí está la captura de pantalla. alt text

Update2: yo era capaz de formatear el código finalmente.

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

Asegúrese de que agrega una nueva línea entre los apodos aquí cuerdas @ " y " @.

+0

Como siempre amigo, lo has descifrado, ¡ni siquiera había oído hablar de aquí! ¡Gracias de nuevo! –

+0

Ah, me alegra saber que pude difundir el poder de las cadenas de escucha. Es genial difundir las funcionalidades de powershell;) – Sung

1

FYI, si no necesita ninguna expansión de variable de PowerShell, entonces es mejor que use cadenas de caracteres aquí citadas. Por ejemplo la siguiente doble cadena entre comillas aquí que podría causar algo de dolor:

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

donde lo siguiente es inofensiva:

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

no es probable que su aquí cadena contendría algo tan obvio, pero un simple $ f se resolvería a nada, es decir, desaparecería de la cadena original. A menos que, por supuesto, $ f se haya definido y configurado en algo distinto de nulo o vacío.

Cuestiones relacionadas