Nombre del informe SCCM: Usuario principal de la consola/Información general de la computadora en estaciones de trabajo

Nombre del informe SCCM: Usuario principal de la consola/Información general de la computadora en estaciones de trabajo

Sigo recibiendo el temido "Una expresión de tipo no booleano especificada en un contexto donde se espera una condición". error en negrita "dbo.v_R_System.ResourceID" en el código siguiente en la sección de declaración "De". Y también aparece el mensaje "Sintaxis incorrecta cerca de la palabra clave 'DÓNDE'". mensaje de error también.

¿Dónde, en esta consulta mía, está el error?

SELECT DISTINCT
    dbo.v_GS_COMPUTER_SYSTEM.Name0 AS [Computer Name],
                       [Top Console User] = CASE 
                             WHEN (dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 is NULL or dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 = '-1') 
                             THEN 'Unknown' 
                             ELSE dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 
                             END, 
                        dbo.v_R_System.AD_Site_Name0 AS [Active Directory Site Name],
                        dbo.v_R_System.Resource_Domain_OR_Workgr0 AS [Domain Name], 
                        dbo.v_GS_OPERATING_SYSTEM.Caption0 AS [Operating System], 
                        dbo.v_GS_OPERATING_SYSTEM.CSDVersion0 AS [Service Pack],
                        dbo.v_GS_COMPUTER_SYSTEM.Model0 AS [Computer Model], 
                        dbo.v_GS_OPERATING_SYSTEM.InstallDate0 AS [OS Install Date]

 FROM         
    dbo.v_GS_COMPUTER_SYSTEM INNER JOIN
                       dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.ResourceID INNER JOIN 
                       dbo.v_GS_OPERATING_SYSTEM INNER JOIN
                       dbo.v_R_System ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = **dbo.v_R_System.ResourceID**

 WHERE
    dbo.v_GS_OPERATING_SYSTEM.Caption0 NOT LIKE '%Server%'

 GROUP BY
    dbo.v_GS_COMPUTER_SYSTEM.Name0, 
                       dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0,
                       dbo.v_R_System.AD_Site_Name0, 
                       dbo.v_R_System.Resource_Domain_OR_Workgr0, 
                       dbo.v_GS_OPERATING_SYSTEM.CSDVersion0, 
                       dbo.v_GS_PC_BIOS.Manufacturer0, 
                       dbo.v_GS_COMPUTER_SYSTEM.NumberOfProcessors0,
                       dbo.v_GS_OPERATING_SYSTEM.Caption0, 
                       dbo.v_GS_COMPUTER_SYSTEM.Model0,
                       dbo.v_GS_OPERATING_SYSTEM.InstallDate0

Respuesta1

Lo más probable es que esté teniendo problemas con un problema de precedencia y su cláusula from no se esté evaluando de la manera que cree.

Intente agregar paréntesis, así:

FROM
    ((dbo.v_GS_COMPUTER_SYSTEM
      INNER JOIN dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP
         ON (dbo.v_GS_COMPUTER_SYSTEM.ResourceID =
             dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.ResourceID)
     )
    INNER JOIN dbo.v_GS_OPERATING_SYSTEM
    )
    INNER JOIN dbo.v_R_System ON (dbo.v_GS_OPERATING_SYSTEM.ResourceID =
                                  dbo.v_R_System.ResourceID)

Si eso no es lo que realmente desea que haga, verá el problema.

Como nota, aunque no es estrictamente necesario y el planificador de ejecución de consultas podría encargarse de ello, es posible que pueda crear tablas temporales más pequeñas si utiliza una subconsulta para cuidar la condición en su cláusula WHERE antes de comenzar. haciendo uniones.

Tampoco estoy del todo seguro de que la sintaxis CASE sea correcta. creo que debería ser

CASE WHEN
    (dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 is NULL
     or dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 = '-1')
  THEN 'Unknown'
  ELSE dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0
END AS [Top Console User]

pero se sabe que estoy equivocado. El error que esperaría de esto sería algo así como "Campo desconocido [Usuario principal de la consola]".

Respuesta2

Nombre del informe SCCM: Usuario principal de la consola/Información general de la computadora en estaciones de trabajo

Explicación:

Esto es lo que hice para arreglar mi código inicial que estaba fallando arriba, así pude obtener información sobre el usuario principal de la consola, así como información general de la computadora, como el fabricante y el modelo. Por cierto, el usuario principal de la consola aprovecha SCCM Asset Intelligence (cuando está habilitado) y requiere que "Auditar eventos de inicio de sesión de cuenta"La política también se habilitará en su entorno, lo que se puede hacer a través de un GPO. Puede leer más sobre cómo habilitar esta política aquí enMicrosoft Technet.Además, estaba teniendo problemas con este informe que no mostraba todos los valores NULL, pero luego jugué con mis uniones y me di cuenta de que necesitaba una unión izquierda con dos uniones derechas para que todos mis datos se mostraran en todas las estaciones de trabajo de mi entorno. . Entonces, el siguiente informe hará dos cosas:

  • Mostrará qué sistemas tienen el usuario de consola principal si el registro de seguridad está siendo auditado para inicios de sesión exitosos (lo que nuevamente se puede hacer a través del GPO ya mencionado) o manualmente por sistema.

y

  • También le mostrará todos los valores NULL (en este caso, 'Auditar eventos de inicio de sesión de cuenta no habilitados' ya que esto es lo que le estoy diciendo al informe que reemplace los valores NULL), lo que obviamente le indicará qué sistemas no tienen el registro de seguridad. siendo auditado.

Nota:

Algunos sistemas pueden informar al "Usuario principal de la consola" incluso si NO tiene habilitada la "Auditar eventos de inicio de sesión de cuenta" a través de un GPO solo si por alguna razón el Registro de seguridad se configuró manualmente para ser auditado en ese sistema en particular por alguien, como un superusuario, un administrador local, etc. Por lo tanto, no se asuste si ve que algunos sistemas informarán esta información, pero la mayoría no, porque es muy probable que esta sea la razón.

Código SQL:

Seleccionar Distinto

dbo.v_GS_COMPUTER_SYSTEM.Name0 AS [Computer Name],
                   [Top Console User] = CASE WHEN 
                        (dbo.v_GS_SYSTEM_CONSOLE_USAGE.TopConsoleUser0) is NULL  
                         THEN 'Audit Account Logon Events Not Enabled' 
                         ELSE dbo.v_GS_SYSTEM_CONSOLE_USAGE.TopConsoleUser0 
                         END, 
                    dbo.v_R_System.Resource_Domain_OR_Workgr0 AS [Domain Name], 
                    dbo.v_GS_OPERATING_SYSTEM.Caption0 AS [Operating System], 
                    dbo.v_GS_OPERATING_SYSTEM.CSDVersion0 AS [Service Pack],
                    dbo.v_GS_COMPUTER_SYSTEM.Manufacturer0 AS [Computer Manufacturer],
                    dbo.v_GS_COMPUTER_SYSTEM.Model0 AS [Computer Model] 

De

dbo.v_R_System 
Left Join
dbo.v_GS_SYSTEM_CONSOLE_USAGE ON dbo.v_R_System.ResourceID = dbo.v_GS_SYSTEM_CONSOLE_USAGE.ResourceID
Right Join 
dbo.v_GS_COMPUTER_SYSTEM ON dbo.v_GS_SYSTEM_CONSOLE_USAGE.ResourceID = dbo.v_GS_COMPUTER_SYSTEM.ResourceID
Right Join
dbo.v_GS_OPERATING_SYSTEM ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_GS_OPERATING_SYSTEM.ResourceID 

Dónde

(Not (dbo.v_GS_OPERATING_SYSTEM.Caption0 Like '%Server%'))

Agrupar por

dbo.v_GS_COMPUTER_SYSTEM.Name0, 
dbo.v_GS_SYSTEM_CONSOLE_USAGE.TopConsoleUser0,
dbo.v_R_System.Resource_Domain_OR_Workgr0, 
dbo.v_GS_OPERATING_SYSTEM.Caption0,
dbo.v_GS_OPERATING_SYSTEM.CSDVersion0,                     
dbo.v_GS_COMPUTER_SYSTEM.Manufacturer0,
dbo.v_GS_COMPUTER_SYSTEM.Model0

Ordenar por

[Top Console User]

Nombre del informe SCCM: Registro del último usuario que inició sesión/cliente SCCM en estaciones de trabajo

Explicación:

Ahora aquí está el código que finalmente necesitaba usar después de que hablé con el Departamento de Gestión de Activos y me dijeron que en realidad no necesitaban el Usuario de la Consola Superior, sino el último Usuario que inició sesión. No entendían la diferencia entre los dos, así que tuve que explicárselo y luego hicieron un "Oh, ya lo entendemos. No, necesitamos el último usuario que inició sesión, así como la última vez". La estación de trabajo se ha registrado o está en línea, gracias". Entonces trabajé en este código que pudieron usar. Por cierto, este código no aprovecha SCCM Asset Intelligence y no es necesario habilitar la auditoría del registro de seguridad para que esto funcione. Además, para obtener la última vez que se "registró" una estación de trabajo, simplemente utilicé el último escaneo de inventario de hardware para obtener esta información. Otra cosa, para obtener el último usuario que inició sesión desde "dbo.v_GS_COMPUTER_SYSTEM.UserName0", el escaneo de inventario de hardware debe habilitarse todos los días, que es como lo configuré en mi entorno SCCM, por eso lo uso. Sin embargo, si no tiene habilitado el Inventario de hardware para ejecutarse diariamente, entonces debería obtener los datos del último usuario que inició sesión desde "V_GS_NETWORK_LOGIN_PROFILE.Name0".

Código SQL:

Seleccionar Distinto

dbo.v_GS_COMPUTER_SYSTEM.Name0 AS [Computer Name],
dbo.v_GS_COMPUTER_SYSTEM.Manufacturer0 AS [Computer Manufacturer],
dbo.v_GS_COMPUTER_SYSTEM.Model0 AS [Computer Model],
    [Last Logged On User] = CASE WHEN 
                MAX(dbo.v_GS_COMPUTER_SYSTEM.UserName0) is NULL  
                        THEN 'Uknown' 
                        ELSE dbo.v_GS_COMPUTER_SYSTEM.UserName0 
                        END, 
dbo.v_R_SYSTEM.Resource_Domain_OR_Workgr0 AS [Domain], 
dbo.v_GS_OPERATING_SYSTEM.Caption0 AS [Operating System], 
dbo.v_GS_OPERATING_SYSTEM.CSDVersion0 AS [Service Pack],
dbo.v_GS_WORKSTATION_STATUS.LastHWScan AS [Last SCCM Client Check-In] 

De

dbo.v_GS_COMPUTER_SYSTEM 
INNER JOIN
dbo.v_R_System ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_R_System.ResourceID
INNER JOIN
dbo.v_GS_OPERATING_SYSTEM ON dbo.v_R_System.ResourceID = dbo.v_GS_OPERATING_SYSTEM.ResourceID
INNER JOIN
dbo.v_GS_WORKSTATION_STATUS ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = dbo.v_GS_WORKSTATION_STATUS.ResourceID

Dónde

dbo.v_GS_OPERATING_SYSTEM.Caption0 Not Like '%Server%' and dbo.v_R_SYSTEM.Name0 Not Like 'WN%' 

Agrupar por

dbo.v_GS_COMPUTER_SYSTEM.Name0, 
dbo.v_GS_COMPUTER_SYSTEM.Manufacturer0,
dbo.v_GS_COMPUTER_SYSTEM.Model0,
dbo.v_GS_COMPUTER_SYSTEM.UserName0, 
dbo.v_R_System.Resource_Domain_OR_Workgr0, 
dbo.v_GS_OPERATING_SYSTEM.Caption0, 
dbo.v_GS_OPERATING_SYSTEM.CSDVersion0,
dbo.v_GS_WORKSTATION_STATUS.LastHWScan

Ordenar por

[Computer Name]

información relacionada