param([string]$Server=$(Throw "Parameter missing: -Server ServerName")) [void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") ##Point to library files $scriptRoot = "D:\DBAScripts\" --change script root directory to match your environment #$scriptRoot = Split-Path (Resolve-Path $myInvocation.MyCommand.Path) . $scriptRoot\LibrarySmo.ps1 #Part of Chad Miller's SQLPSX project on CodePlex . $scriptRoot\DataTable.ps1 #Included with the scripts for this blog, also from a CodePlex project (http://www.codeplex.com/PSObject) Set-Alias -Name Test-SqlConn -Value D:\DBAScripts\Test-SqlConn.ps1 ##Define variables ## open database connection $conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=$server; Initial Catalog=master; Integrated Security=SSPI") $conn.Open() $cmd = $conn.CreateCommand() $cmd.CommandText= " CREATE TABLE #JobsRun ( ServerName nvarchar(128), Job_Name nvarchar(128), Run_Date datetime, Job_Duration time(7), Run_Status varchar(50), Sample_Date datetime ); insert into #JobsRun select @@SERVERNAME AS ServerName ,j.name Job_Name ,(msdb.dbo.agent_datetime(jh.run_date,jh.run_time)) As Run_Date ,substring(cast(run_duration + 1000000 as varchar(7)),2,2) + ':' + substring(cast(run_duration + 1000000 as varchar(7)),4,2) + ':' + substring(cast(run_duration + 1000000 as varchar(7)),6,2) Job_Duration ,case when run_status = 0 then 'Failed' when run_status = 1 then 'Succeed' when run_status = 2 then 'Retry' when run_status = 3 then 'Cancel' when run_status = 4 then 'In Progress' end as Run_Status ,GETDATE() As Sample_Date FROM msdb.dbo.sysjobhistory jh join msdb.dbo.sysjobs j on jh.job_id = j.job_id where step_id = 0 and enabled = 1 order by cast(cast(run_date as char) + ' ' + substring(cast(run_time + 1000000 as varchar(7)),2,2) + ':' + substring(cast(run_time + 1000000 as varchar(7)),4,2) + ':' + substring(cast(run_time + 1000000 as varchar(7)),6,2) as datetime) desc delete from MgtServer.DBA_Console.dbo.LastJobStatus where ServerName = '$server' -- Change 'MgtServer' to the name of whatever the SQL Server is in -- your env that will house the LastJobStatus table which stores the -- results of this script insert into MgtServer.DBA_Console.dbo.LastJobStatus (ServerName, Job_Name, Run_Date, Job_Duration, Run_Status, Sample_Date) select jr.ServerName, jr.Job_Name, jr.Run_Date, jr.Job_Duration, jr.Run_Status, jr.Sample_Date from #JobsRun jr where Run_Date = ( select max(jr1.Run_Date) from #JobsRun jr1 where jr1.Job_Name = jr.Job_Name) drop table #JobsRun; " $cmd.ExecuteNonQuery() $conn.Close()