Una pregunta común de compañeros, e incluso de mi mismo, es ¿y cuándo le tocan actualizaciones a X servidor? o ¿cuándo fue la última vez que se le instalaron actualizaciones a X servidor?
Para poder responder esa pregunta rápidamente me he armado un reporte que, tras pedirnos el nombre del equipo en cuestión, nos informa la última y la próxima ventana de mantenimiento que le corresponde.
Seguramente se puede hacer mejor, pero a mí me funciona así:
La query del reporte es esta:
Declare @Primero as datetime Declare @Segundo as datetime Declare @Tercero as datetime Declare @Cuarto as datetime Declare @ultPrimero as datetime Declare @ultSegundo as datetime Declare @ultTercero as datetime Declare @ultCuarto as datetime set @Primero=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0)) set @Primero=( case when @Primero<getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,+1,getdate())),dateadd(mm,+1,getdate()))), 0)) else @Primero end) set @Segundo=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+7 set @Segundo=( case when @Segundo<getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,+1,getdate())),dateadd(mm,+1,getdate()))), 0))+7 else @Segundo end) set @Tercero=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+14 set @Tercero=( case when @Tercero<getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,+1,getdate())),dateadd(mm,+1,getdate()))), 0))+14 else @Tercero end) set @Cuarto=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+21 set @Cuarto=( case when @Cuarto<getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,+1,getdate())),dateadd(mm,+1,getdate()))), 0))+21 else @Cuarto end) set @ultPrimero=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0)) set @ultPrimero=( case when @ultPrimero>getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,-1,getdate())),dateadd(mm,-1,getdate()))), 0)) else @ultPrimero end) set @ultSegundo=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+7 set @ultSegundo=( case when @ultSegundo>getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,-1,getdate())),dateadd(mm,-1,getdate()))), 0))+7 else @ultSegundo end) set @ultTercero=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+14 set @ultTercero=( case when @ultTercero>getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,-1,getdate())),dateadd(mm,-1,getdate()))), 0))+14 else @ultTercero end) set @ultCuarto=dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,getdate()),getdate())), 0))+21 set @ultCuarto=( case when @ultCuarto>getdate() then dateadd(dd,-1,DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,7-datepart(day,dateadd(mm,-1,getdate())),dateadd(mm,-1,getdate()))), 0))+21 else @ultCuarto end) SELECT dbo.v_R_System.Name0, v_Collection.Name as 'Colección', sw.Name AS [Ventana], sw.Description, sw.Duration AS 'Duración en minutos', sw.IsEnabled AS 'Habilitada', CASE substring(Description, 12,5) WHEN 'First' THEN @Primero WHEN 'Secon' THEN @Segundo WHEN 'Third' THEN @Tercero WHEN 'Fourt' THEN @Cuarto END as [Próxima ejecución], CASE substring(Description, 12,5) WHEN 'First' THEN @ultPrimero WHEN 'Secon' THEN @ultSegundo WHEN 'Third' THEN @ultTercero WHEN 'Fourt' THEN @ultCuarto END as [Última ejecución] FROM dbo.v_ServiceWindow AS sw INNER JOIN dbo.v_FullCollectionMembership AS fcm ON sw.CollectionID = fcm.CollectionID INNER JOIN v_Collection ON sw.CollectionID=v_Collection.CollectionID INNER JOIN dbo.v_R_System ON fcm.ResourceID = dbo.v_R_System.ResourceID WHERE (dbo.v_R_System.Operating_System_Name_and0 LIKE '%server%') and dbo.v_R_System.Name0=@servidor
La query para el prompt "@servidor" es:
begin if (@__filterwildcard = '') SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS where SYS.Client0=1 and isnull(SYS.Obsolete0, 0) = 0 ORDER By SYS.Netbios_Name0 else SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS WHERE SYS.Netbios_Name0 like @__filterwildcard and SYS.Client0=1 and isnull(SYS.Obsolete0, 0) = 0 ORDER By SYS.Netbios_Name0 end
El resultado del reporte se ve así:
No hay comentarios:
Publicar un comentario