Название отчета SCCM: Основная информация о пользователях консоли/общих компьютерах на рабочих станциях

Название отчета SCCM: Основная информация о пользователях консоли/общих компьютерах на рабочих станциях

Я постоянно получаю ужасное сообщение "Выражение небулева типа указано в контексте, где ожидается условие". errorr на выделенном жирным шрифтом "dbo.v_R_System.ResourceID" в приведенном ниже коде в разделе оператора "From". И я также получаю сообщение об ошибке "Неправильный синтаксис рядом с ключевым словом 'WHERE'".

Где в этом моем вопросе ошибка?

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

решение1

Скорее всего, у вас возникли проблемы с приоритетом, и ваше предложение from оценивается не так, как вы думаете.

Попробуйте добавить скобки, например так:

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 до начала выполнения объединений.

Я также не совсем уверен, что ваш синтаксис CASE правильный. Я считаю, что он должен быть

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]

но, как известно, я ошибался. Ошибка, которую я ожидал бы от этого, была бы чем-то вроде "Неизвестное поле [Top Console User]".

решение2

Название отчета SCCM: Основная информация о пользователях консоли/общих компьютерах на рабочих станциях

Объяснение:

Это то, что я сделал, чтобы исправить мой первоначальный код, который выдавал мне ошибку выше, так что я смог вытащить информацию о главном пользователе консоли, а также некоторую общую информацию о компьютере, такую ​​как производитель и модель. Кстати, главный пользователь консоли использует SCCM Asset Intelligence (когда он включен) и требует, чтобы "Аудит событий входа в учетную запись" политика также может быть включена в вашей среде, что можно сделать с помощью GPO. Вы можете прочитать больше о включении этой политики здесь наMicrosoft TechNet.Кроме того, у меня были проблемы с этим отчетом, не показывающим все значения NULL, но затем я поигрался с моими соединениями и понял, что мне нужно одно левое соединение с двумя правыми соединениями, чтобы все мои данные отображались для всех рабочих станций в моей среде. Поэтому отчет ниже будет делать две вещи:

  • Он покажет, в каких системах находится главный пользователь консоли, если журнал безопасности проверяется на предмет успешных входов в систему (что опять же можно сделать через уже упомянутый объект групповой политики) или вручную для каждой системы.

и

  • Он также покажет вам все значения NULL (в данном случае «Аудит событий входа в учетную запись не включен», поскольку именно на это я указал отчету заменить значения NULL), что, очевидно, сообщит вам, в каких системах не проводится аудит журнала безопасности.

Примечание:

Некоторые системы могут сообщать о «главном пользователе консоли», даже если у вас НЕ включен «Аудит событий входа в учетную запись» через GPO, только если по какой-то причине журнал безопасности был вручную настроен на аудит в этой конкретной системе кем-то, например, суперпользователем или локальным администратором и т. д. Поэтому не пугайтесь, если увидите, что некоторые системы сообщают эту информацию, но большинство из них этого не делают, потому что, скорее всего, именно по этой причине.

SQL-код:

Выбрать Уникальный

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] 

От

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 

Где

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

Группа по

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

Сортировать по

[Top Console User]

Имя отчета SCCM: Последний вошедший в систему пользователь/клиент SCCM Регистрация на рабочих станциях

Объяснение:

Вот код, который мне наконец-то понадобился после того, как я поговорил с отделом управления активами, и они сказали мне, что им на самом деле не нужен пользователь верхней консоли, а скорее последний вошедший в систему пользователь. Они не понимали разницы между ними, поэтому мне пришлось объяснить им это, а затем они сказали: «О, теперь мы поняли. Нет, нам нужен последний вошедший в систему пользователь, а также последний раз, когда рабочая станция зарегистрировалась или была в сети, спасибо». Итак, затем я поработал над этим кодом, который они смогли использовать. Кстати, этот код не использует SCCM Asset Intelligence, и для его работы не нужно включать аудит журнала безопасности. Кроме того, чтобы получить последний раз, когда рабочая станция «зарегистрировалась», я просто использовал сканирование последнего оборудования, чтобы извлечь эту информацию. Еще один момент: чтобы получить настоящего последнего вошедшего в систему пользователя из "dbo.v_GS_COMPUTER_SYSTEM.UserName0", сканирование инвентаризации оборудования должно быть включено каждый день, как я и настроил его в своей среде SCCM, поэтому я его и использую. Однако, если у вас не включена ежедневная инвентаризация оборудования, то вместо этого вам следует получить данные последнего вошедшего в систему пользователя из "V_GS_NETWORK_LOGIN_PROFILE.Name0".

SQL-код:

Выбрать Уникальный

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] 

От

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

Где

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

Группа по

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

Сортировать по

[Computer Name]

Связанный контент