Tengo una base de datos central en la que escribo los resultados del trabajo en todos mis servidores. Paso 3 parámetros a través de powershell en un trabajo SQL de nuevo a un sp en el servidor central que verifica que el trabajo se esté ejecutando en ese momento, etc. La información se expone luego a través de SSRS para que podamos ver fallas en un trabajo / trabajos de larga ejecución / & trabajos que no se han ejecutado pero que deberían haberse ejecutado (o si alguien se metió con un horario).
Para hacer esto, tengo 2 pasos de trabajo agregados en cada trabajo en cada servidor y me gustaría reducir el script a solo 1 paso agregado a cada trabajo ... posiblemente incluso llamarlo desde un recurso compartido de red ...
Pero mi problema es uno de los 3 parámetros que paso. Necesito obtener el nombre de trabajo o el nombre del trabajo de ejecución dentro del trabajo de ejecución para no tener que codificar el parámetro de nombre. Los 3 parámetros que paso son jobid, estado (éxito / falla), errormsg. El script de PowerShell que escribí es bastante sencillo.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID', 'Success / FAIL', 'BAD MESSAGE HERE'"
Esto escribe lo que necesito en la mesa. He mirado msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / pero ninguno de estos garantizará que obtenga el ID o el nombre del trabajo de ejecución correcto en caso de que haya más de 1 trabajos ejecutándose en al mismo tiempo.
Incluso he intentado ver los procesos sys.sys pero creo que, dado que el trabajo del agente es un script de PowerShell, se muestra como ".Net SqlClient Data Provider", por lo que no puedo recortar el JOBID binario de los trabajos que se muestran como "SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C: Paso 1) "--- esto lo aprendí de la publicación de Denny cherry - gracias denny-
Cualquier idea sobre cómo tomar el jobid ejecutor sería muy apreciada.
Gracias,
Chris