Argumentos de PowerShell y Logparser
-
05-07-2019 - |
Pregunta
Estoy intentando ejecutar algunos comandos de Logparser desde PowerShell pero tengo problemas para pasar los argumentos correctamente. Aquí está el extracto de mi script;
d:\scripting\smtplogs\logparser\logparser.exe "SELECCIONE los 50 receptores principales, CONTAR() EN %TMPOutput% opReceiversNDRALL.gif DESDE %TempDir%\PostAll.log DONDE Al Remitente LE GUSTA '<>' Y Al Receptor NO LE GUSTA '%%go-fmtopper%%' GRUPO POR Receptor ORDEN POR RECUENTO () DESC" -i:TSV -iSeparator:space -headerRow:OFF -iHeaderFile:"header3.tsv" -lineFilter:"+10." -o:CHART -chartType:ColumnClustered -config:MyScript.js -chartTitle:"Receptores para mensajes NULL TODOS para %DateGraph%"
¡He leído mucho sobre encapsular argumentos pero parece que no puedo entender cómo hacer que esto funcione!
Cualquier ayuda que puedan brindarnos será muy apreciada.
Gracias
Solución
Para un parámetro de cadena complejo, intente pasar el argumento usando powershell aquí-cuerdas para que no tengas que preocuparte por escapar de comillas simples/dobles
ACTUALIZACIÓN1:No pude hacer funcionar el formato, así que aquí está la captura de pantalla.
ACTUALIZACIÓN2:Finalmente pude formatear el código.
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 agregar una nueva línea entre los apodos de la cadena aquí. @" y "@.
Otros consejos
Para su información, si no necesita ninguna expansión de variable de PowerShell, entonces es mejor que use cadenas entre comillas simples. Por ejemplo, la siguiente cadena doble citada aquí puede causarle algo de dolor:
@"
$(get-process <some_core_os_process> | stop-process)
"@
donde lo siguiente es inofensivo:
@'
$(get-process <some_core_os_process> | stop-process)
'@
No es probable que su cadena aquí contenga algo tan obvio, pero un simple $ f no se resolvería en nada, es decir, desaparecería de la cadena original. A menos que, por supuesto, $ f se haya definido y configurado en algo que no sea nulo o vacío.