Продолжайте получать ошибку при запуске моего кода SQL

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

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

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

2 ответа

Скорее всего, у вас возникли проблемы с проблемой приоритета, а предложение 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]]".

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

Объяснение:

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

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

а также

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

Примечание:

Некоторые системы могут сообщать "Top Console User", даже если у вас НЕ включены "Audit Account Logon Events", включенные через объект групповой политики, только если по какой-то причине журнал безопасности был вручную настроен для аудита в этой конкретной системе кем-то, например Суперпользователь, или локальный администратор и т. д. Итак, не волнуйтесь, если вы видите, что некоторые системы сообщают эту информацию, но большинство из них этого не делают, потому что это, скорее всего, причина.

Код 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, и для его работы не нужно включать аудит Журнала Безопасности. Кроме того, для того, чтобы в последний раз получить рабочую станцию ​​"Checked-In", я просто использовал Last Scan Inventory Scan для получения этой информации. Другое дело, чтобы получить истинного последнего вошедшего в систему пользователя из "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]
Другие вопросы по тегам