我有一个中央数据库,可以在所有服务器上写入工作结果。我通过SQL作业中的powershell将3个参数传递回中央服务器上的sp,以验证该作业应在当时运行,等等。然后通过SSRS公开该信息,因此我们可以看到作业失败/长时间运行的作业/ &尚未运行但应该运行的作业(或者如果有人弄乱了时间表)。
为此,我将2个作业步骤添加到每台服务器上的每个作业中,并且我希望将脚本减少到仅添加到每个作业中的1个步骤。甚至可能从网络共享中调用该脚本。
但是我的问题是我传递的三个参数之一。我需要从正在执行的作业中获取正在执行的作业ID或作业名称,因此不必硬编码name参数。我传递的3个参数是Jobid,状态(成功/失败)和errormsg。我编写的powershell脚本非常简单。
调用sqlcmd -ServerInstance“ MYRemoteSYSTEM”-数据库remoteDB-查询“ exec dbo.JOB_LOG'JOBNAME / ID','成功/失败','错误消息在这里'''
这将我需要的东西写到桌子上。我已经看过msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /,但是这些都不保证在执行多个作业的情况下,我可以获得正确执行作业的ID或名称。同时。
我什至尝试查看sys.sysprocesses,但我认为由于代理作业是一个powershell脚本,因此它显示为“ .Net SqlClient数据提供程序”,因此我无法从显示为“ SQLAgent-”的作业中删除二进制JOBID。 TSQL JobStep(作业0xF1800243164745429C30474FFD5C990C:第1步)” ---我从Denny Cherry的帖子中学到的 -谢谢denny-
任何关于如何获取执行中的Jobid的想法将不胜感激。
谢谢,
克里斯