SCCM 보고서 이름: 워크스테이션의 상위 콘솔 사용자/일반 컴퓨터 정보

SCCM 보고서 이름: 워크스테이션의 상위 콘솔 사용자/일반 컴퓨터 정보

나는 "조건이 예상되는 컨텍스트에 지정된 부울 유형이 아닌 표현식"이라는 무서운 메시지를 계속 받습니다. 굵게 표시된 "에 오류가 있습니다.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]

그러나 나는 틀린 것으로 알려져 있습니다. 여기서 예상되는 오류는 "알 수 없는 필드 [상위 콘솔 사용자]"로 인한 것입니다.

답변2

SCCM 보고서 이름: 워크스테이션의 상위 콘솔 사용자/일반 컴퓨터 정보

설명:

이것은 위에서 오류가 발생한 초기 코드를 수정하기 위해 수행한 작업이므로 상위 콘솔 사용자에 관한 정보는 물론 제조업체 및 모델과 같은 일부 일반 컴퓨터 정보를 가져올 수 있었습니다. 그런데 상위 콘솔 사용자는 SCCM Asset Intelligence(활성화된 경우)를 활용하고 "계정 로그온 이벤트 감사" 정책은 GPO를 통해 수행할 수 있는 환경에서도 활성화됩니다. 이 정책 활성화에 대한 자세한 내용은 여기에서 확인할 수 있습니다.마이크로소프트 테크넷.또한 이 보고서에 모든 NULL 값이 표시되지 않는 문제가 있었지만 조인을 사용해 본 결과 내 환경의 모든 워크스테이션에 대해 모든 데이터를 표시하려면 하나의 왼쪽 조인과 두 개의 오른쪽 조인이 필요하다는 것을 깨달았습니다. . 따라서 아래 보고서는 두 가지 작업을 수행합니다.

  • 성공적인 로그온에 대해 보안 로그를 감사하는 경우(이미 언급한 GPO를 통해 다시 수행할 수 있음) 또는 시스템별로 수동으로 상위 콘솔 사용자가 있는 시스템이 표시됩니다.

그리고

  • 또한 보안 로그가 없는 시스템을 분명히 알려주는 모든 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 자산 인텔리전스를 활용하지 않으며 이 기능이 작동하려면 보안 로그 감사를 활성화할 필요가 없습니다. 또한 워크스테이션이 마지막으로 "체크인"된 시간을 얻기 위해 마지막 하드웨어 인벤토리 검색을 사용하여 이 정보를 가져왔습니다. 또 한 가지, "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]

관련 정보