Nome do relatório SCCM: Informações gerais do usuário/computador do console superior em estações de trabalho

Nome do relatório SCCM: Informações gerais do usuário/computador do console superior em estações de trabalho

Continuo recebendo o temido "Uma expressão de tipo não booleano especificada em um contexto onde uma condição é esperada". erro em negrito "dbo.v_R_System.ResourceID" no código abaixo na seção "De' instrução. E também recebo a mensagem "Sintaxe incorreta próxima à palavra-chave 'WHERE'." mensagem de erro também.

Onde, nesta minha consulta, está o erro?

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

Responder1

Provavelmente, você está tendo problemas com um problema de precedência e sua cláusula from não está sendo avaliada da maneira que você pensa.

Tente adicionar parênteses, assim:

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)

Se não é isso que você realmente deseja, você vê o problema.

Como observação, embora não seja estritamente necessário e possa ser resolvido pelo planejador de execução de consulta, você poderá criar tabelas temporárias menores se usar uma subconsulta para cuidar da condição em sua cláusula WHERE antes de começar fazendo junções.

Também não tenho certeza se sua sintaxe CASE está correta. Eu acredito que deveria 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]

mas sou conhecido por estar errado. O erro que eu esperaria disso seria algo como "Campo desconhecido [Usuário principal do console]".

Responder2

Nome do relatório SCCM: Informações gerais do usuário/computador do console superior em estações de trabalho

Explicação:

Isso foi o que fiz para corrigir meu código inicial que estava apresentando erro acima, de modo que consegui obter informações sobre o usuário principal do console, bem como algumas informações gerais do computador, como fabricante e modelo. A propósito, o usuário principal do console aproveita o SCCM Asset Intelligence (quando está habilitado) e exige que o "Eventos de logon da conta de auditoria" também pode ser habilitada em seu ambiente, o que pode ser feito por meio de um GPO. Você pode ler mais sobre como habilitar esta política aqui emTechNet da Microsoft.Além disso, eu estava tendo problemas com este relatório não mostrando todos os valores NULL, mas então brinquei com minhas junções e percebi que precisava de uma junção esquerda com duas junções direitas para que todos os meus dados fossem exibidos para todas as estações de trabalho em meu ambiente . Portanto, o relatório abaixo fará duas coisas:

  • Ele mostrará quais sistemas possuem o usuário principal do console se o log de segurança estiver sendo auditado para logons bem-sucedidos (o que novamente pode ser feito através do GPO já mencionado) ou manualmente por sistema

e

  • Ele também mostrará todos os valores NULL (neste caso, 'Eventos de logon da conta de auditoria não habilitados', pois é isso que estou dizendo ao relatório para substituir os valores NULL), o que obviamente informará quais sistemas não possuem o log de segurança sendo auditados.

Observação:

Alguns sistemas podem reportar o "Usuário do console principal", mesmo que você NÃO tenha os "Eventos de logon da conta de auditoria" habilitados por meio de um GPO, somente se, por algum motivo, o log de segurança tiver sido configurado manualmente para ser auditado naquele sistema específico por alguém, como um superusuário ou um administrador local, etc. Portanto, não se desespere se você perceber que alguns sistemas reportam essas informações, mas a maioria deles não, porque esse é mais do que provavelmente o motivo.

Código SQL:

Selecione 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 

Onde

(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]

Nome do relatório SCCM: Último login do usuário/cliente SCCM em estações de trabalho

Explicação:

Agora, aqui está o código que finalmente precisei usar depois de falar com o Departamento de gerenciamento de ativos e eles me disseram que na verdade não precisavam do usuário principal do console, mas sim do último usuário conectado. Eles não entenderam a diferença entre os dois, então tive que explicar isso a eles, depois eles fizeram um "Ah, entendemos agora. Não, precisamos do último usuário conectado, bem como da última vez que um estação de trabalho fez check-in ou on-line, obrigado." Então, trabalhei nesse código que eles puderam usar. A propósito, esse código não aproveita o SCCM Asset Intelligence e nenhuma auditoria de log de segurança precisa ser habilitada para que isso funcione. Além disso, para obter a última vez que uma estação de trabalho fez check-in, usei apenas a última verificação de inventário de hardware para obter essas informações. Outra coisa, para obter o último usuário logado verdadeiro em "dbo.v_GS_COMPUTER_SYSTEM.UserName0", a verificação de inventário de hardware deve ser habilitada todos os dias, que é como eu a configurei em meu ambiente SCCM, é por isso que eu a uso. No entanto, se você não tiver o Inventário de Hardware habilitado para execução diária, você deverá obter os últimos dados do usuário conectado em "V_GS_NETWORK_LOGIN_PROFILE.Name0".

Código SQL:

Selecione 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

Onde

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]

informação relacionada