Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Consulta SQL y modulo no inicializado
#1
Buenas,

Quiero que el servidor donde tengo el agente pandora instalado, ejecute unas querys SQL y se envien los datos al Servidor de Pandora, pero todo el rato el modulo aparece como no incializado y ya no se que más mirar.

Os pongo en situación

Tengo esta Query Sencilla que me devuelve un valor, 1 o 0
Code:
SELECT [active]
  FROM [Smartkanban].[dbo].[drf_rf_lectoresrf]
  Where [IdLectorRF]='133'

y luego tengo un script en powershell que llama a esta query, tal que:

Code:
$query=SQLCMD.EXE -d XXXX -U XXXXX-P XXXXX -i "C:\Scripts\query.sql"
$query

Cuando ejecuto el script via powershell me retorna un 0 en este caso

[Image: zl9b9s.jpg]

En el Pandora Agent tengo este modulo definido

Code:
module_begin
module_name Alive
module_type generic_data
module_exec powershell -File sqlcmd.ps1
module_description Alive
module_group application
module_end

Bien, esto debería llegar a Pandora_Console y mostrarme un 0,no? como todos los otros scripts que he hecho en otras ocasiones.

Pues en pandora_console aparece como modulo no incializado en Azul, como sino recibiese datos y no entiendo el porque?

si lo pongo en modo debug, tengo esto

Code:
<module>
    <name><![CDATA[Alive]]></name>
    <type><![CDATA[generic_data]]></type>
    <description><![CDATA[Alive]]></description>
    <module_interval><![CDATA[1]]></module_interval>
    <module_group>application</module_group>
</module>
</agent_data>

El otro fichero de pandora_agent me muestra lo siguiente:

Code:
2017-04-12 15:37:06 Output error on module Alive
2017-04-12 15:38:06 Output error on module Alive

Y en el Pandora_console nos e reciben datos...que puede ser? muchas gracias

saludos


 Reply
#2
Hola gairhald,

En el XML si te fijas no se envía ningún dato en el contenido, únicamente el nombre, descripción, etc.

Puede ser debido a la ejecución indicada en la línea module_exec. Puede que necesites llamar a powershell con la ruta completa, salvo que se encuentre en el PATH y sea reconocido como comando nativo.

Si ejecutas a mano desde un terminal cmd normal (no el de powershell) la línea, qué te devuelve?
Code:
powershell -File sqlcmd.ps1

Puedes probar a indicar la ruta completa a powershell.exe, una buena forma de depurar esto es justamente haciendo la comprobación que mencionaba, ejecutar en un cmd la línea completa hasta obtener el resultado esperado (1 o 0), que el módulo debería obtener correctamente e inicializarse.

Un saludo,
Antonio.
 Reply
#3
Buenas Antonio,

Si esta en el path, puesto que al ejectuarlo me lo reconoce y me devuelve un 0. El script que llamo esta dentro de la carpeta pandora_console\util.

Code:
C:\Program Files\pandora_agent\util>powershell -File sqlcmd.ps1
0

C:\Program Files\pandora_agent\util>

He probado a cambiar la ruta completa a
Code:
module_exec "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File sqlcmd.ps1

y me sigue pasando lo mismo, en el server me dice que el modulo no esta inicializado y aunque debugue sigue siendo lo mismo. No entiendo porque no aparecen datos en el XML referente a este modulo si ejecutandolo en el CMD o en el powershell si devuelve un valor


Lo unico que acabo de ver es, si ejecuto desde CMD, me devuelve un 0 y luego un salto de linea, mientras que si lo ejecuto desde powershell me devuelve un 0 solo, sin el salto de linea, es posible que Pandora la ejecutarlo desde CMD, este recogiendo ese salto de linea final y por eso no recibe los datos?

[Image: 2v2w3e1.jpg]

Estoy intentado eliminar el salto final y sigue haciendolo, imagino que el CMD se comporta de manera difernete al Powershell. De todas formas sigue sin funcionar :/

Aunque tengo asi mas scripts y nunca he tenido este problema
 Reply
#4
Hola gairhald,

Ahora que me fijo, es posible que necesites poner la ruta completa también al script en la línea module_exec. Algo así:

Code:
module_exec "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File "C:\Program Files\pandora_agent\util\sqlcmd.ps1"

Y te aconsejo que continues utilizando el modo debug y analizando lo que muestra el XML para poder descubrir cuál es el problema. Si no se resuelve rápidamente poniendo las rutas completas, prueba jugando con el tema de las comillas, o incluso simplificando la ejecución por un script ps1 que simplemente haga un "echo 1", para ver si el problema puede estar en el script (que no devuelva un resultado de ejecución admitido o similar). Así ir reduciendo las pruebas hasta ver dónde está el problema, y luego ponerse a solucionarlo :P

En cuanto al salto de línea, no creo que sea el problema, efectivamente creo que cmd tiene ese comportamiento siempre cuando se ejecutan los scripts llamando a powershell desde cmd.

Un saludo,
Antonio.
 Reply
#5
Buenas Antonio

he creado otro script mas basico que recoja la hora

Code:
$date=get-date
$date.hour

si lo ejecuto, tanto en powershell como en el CMD me devuelve el valor de la hora, solo las HORAS, es decir ahora mismo me da 10.
Si debugo, veo en el XML que si, si recoge ese valor 10

Code:
<module>
    [code]<name><![CDATA[Bustia Palex]]></name>
    <type><![CDATA[generic_data]]></type>
    <description><![CDATA[Bustia Palex]]></description>
    <module_interval><![CDATA[1]]></module_interval>
    <module_group>application</module_group>
</module>
<module>
    <name><![CDATA[echo]]></name>
    <type><![CDATA[generic_data]]></type>
    <description><![CDATA[echo]]></description>
    <module_interval><![CDATA[1]]></module_interval>
    <module_group>application</module_group>
    <data><![CDATA[10]]></data>
</module>
</agent_data>

Pero el otro me sigue sin funcionar, no recoge los datos

Creo que es un problema de tipo de datos. Lo que estoy sacando es un string y pandora necesita recoger un intenger,no? Pero me estoy peleando con convertirlo a int y tampoco parece que funcione...voy a ver si lo puedo sacar de otra manera o algo
 Reply
#6
YA ESTA!!

El problema era como había comentado antes, problema de tipo de datos, al ahcer la consulta, me estaba dando un STRING y no podía convertirlo de array a un int  en powershell, así a saco.

Así que he tenido que guardar la consulta en un TXT y recogerlo de nuevo en otro array que me lo separaba por saltos de linea y luego unicamente he de mostrar el valor del array que me interesa, que ya lo detecta como un integer.

Un  poco rebuscado, pero bueno, funciona que es lo que necesitaba, merci por la ayuda Antonio!

Code:
$query = SQLCMD.EXE -d xxxxxx -U xxxxx -P xxxxx -i "C:\Scripts\CSA_QUI.sql" | Out-File -FilePath C:\Scripts\sqlquery.txt -Append

$fileContents = Get-Content "C:\Scripts\sqlquery.txt"
$ficheros = $fileContents -split "`r`n"
$ficheros[2]
 Reply
#7
Uf! Sí has tenido que darle un par de vueltas al final, pero bueno lo importante es que funcione Smile

Nada! Me alegro de que hayas logrado solucionarlo. Como consejo para futuras te digo lo mismo, siempre ir reduciendo hasta "la mínima unidad" suele ser buena idea, y se van descartando posibles puntos problemáticos.

Un saludo,
Antonio.
 Reply
#8
Vaya, ahora el problema que tengo es que cuando lo ejecuto con el servicio de PANDORA, no tiene permisos para escribir datos, por lo que no me sirve...es posible poder ejecutar la llamada a powershell como adminsitrador desde el pandora.conf¿

Code:
module_exec run as powershell -File sqlcmd.ps1

Rollo algo asÍ? merci
 Reply
#9
Hola gairhald,

El servicio de pandora no puede escribir en ficheros aunque se encuentren en su propia ruta (la del agente)? Otra opción quizá sería ejecutar el agente con un usuario con permisos superiores, o bien dar permisos de lectura/escritura al usuario pandora sobre el directorio en el que se guarde el fichero de texto temporal.

Un saludo,
Antonio.
 Reply


Users browsing this thread: 1 Guest(s)


(c) 2006-2018 Artica Soluciones Tecnológicas. Contents of this wiki are under Create Common Attribution v3 licence. | pandorafms.com | pandorafms.org

Theme © MyBB Themes