none
Доработка стандартного отчёта по железу RRS feed

  • Вопрос

  • Добрый день!

    Есть SCCM2012SP2. Включили инвентаризацию. Есть задача сделать некую сводную таблицу по серверам. Есть дефолтный отчёт Hardware 01A - Summary of computers in a specific collection. По большому счёту на данный момент в него надо добавить сбор IP адресов (ну можно ещё и MAC, но не обязательно пока что). Я нашёл тут "модернизацию" запроса

    https://social.technet.microsoft.com/Forums/systemcenter/en-US/25f26e97-06d8-4b87-934f-422ce9ded2bd/how-customize-hardware-01a-summary-of-computers-in-a-specific-collection-report?forum=configmgrgeneral

    Однако у меня ругается на v_GS_DEVICE_NETWORK. Сообщает:

    TITLE: Microsoft SQL Server Report Builder
    ------------------------------
    An error occurred while executing the query.
    Invalid object name 'v_GS_DEVICE_NETWORK'.
    ------------------------------
    ADDITIONAL INFORMATION:
    Invalid object name 'v_GS_DEVICE_NETWORK'. (Microsoft SQL Server, Error: 208)
    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.3000&EvtSrc=MSSQLServer&EvtID=208&LinkId=20476
    ------------------------------
    BUTTONS:
    OK
    ------------------------------

    Как победить ошибку?

    24 июня 2016 г. 13:47

Ответы

  • ну по бестпрактису стоит обращаться не к таблицам (Tables), а к представлениям (Views).

    вот так называется:

    v_GS_NETWORK_ADAPTER_CONFIGURATION


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/

    27 июня 2016 г. 13:38
    Модератор
  • так напишите под себя, что вам нужно. Каждый репорт можно редактировать.

    селектим, что нам нужно вытащить, цепляем v_r_system и v_gs_network_adapter_configuration по resource.ID и пустые поля не выводим. 

    Все представления v_gs_ это текущая инвентаризация, v_hs_ - история, _res_coll_ID - коллеции по ID.

    select distinct
    
    Netbios_Name0,
    Operating_System_Name_and0,
    IPAddress0,
    MACAddress0
    
    from v_r_system
    join v_GS_NETWORK_ADAPTER_CONFIGURATION on v_R_System.ResourceID = v_GS_NETWORK_ADAPTER_CONFIGURATION.ResourceID
    where IPAddress0 is not null


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/

    27 июня 2016 г. 13:46
    Модератор

Все ответы

  • все, что связано с сетевыми адаптерами лежит в представлении v_gs_networkconfiguration, таблица macaddress0 и там же есть адреса.

    делаете join по deviceid или resourceid, смотреть надо, под рукой базы нет и все, easy.


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/

    25 июня 2016 г. 20:32
    Модератор
  • Спасибо за ответ, однако представления v_gs_networkconfiguration тоже нет (аналогичная ошибка). В базе sql есть таблица dbo.network_data, где как раз есть нужные поля ipaddress00 и macaddress00. Только пока не разобрался как к ним обратится. Отчёт, который я нашёл, сделан под sms2007. Видимо в базе sccm2012 поменяли какие-то таблицы
    27 июня 2016 г. 8:21
  • ну по бестпрактису стоит обращаться не к таблицам (Tables), а к представлениям (Views).

    вот так называется:

    v_GS_NETWORK_ADAPTER_CONFIGURATION


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/

    27 июня 2016 г. 13:38
    Модератор
  • так напишите под себя, что вам нужно. Каждый репорт можно редактировать.

    селектим, что нам нужно вытащить, цепляем v_r_system и v_gs_network_adapter_configuration по resource.ID и пустые поля не выводим. 

    Все представления v_gs_ это текущая инвентаризация, v_hs_ - история, _res_coll_ID - коллеции по ID.

    select distinct
    
    Netbios_Name0,
    Operating_System_Name_and0,
    IPAddress0,
    MACAddress0
    
    from v_r_system
    join v_GS_NETWORK_ADAPTER_CONFIGURATION on v_R_System.ResourceID = v_GS_NETWORK_ADAPTER_CONFIGURATION.ResourceID
    where IPAddress0 is not null


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/

    27 июня 2016 г. 13:46
    Модератор
  • Спасибо, нашлась такая конструкция:

    SELECT DISTINCT 
                          TOP (100) PERCENT dbo.v_R_System_Valid.Netbios_Name0 AS [Computer Name], 
                          dbo.v_R_System_Valid.Resource_Domain_OR_Workgr0 AS [Domain/Workgroup], dbo.v_Site.SiteName AS [SMS Site Name], 
                          CASE WHEN (v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 IS NULL OR 
                          v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 = '-1') 
                          THEN 'Unknown' ELSE v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.TopConsoleUser0 END AS [Top Console User], 
                          dbo.v_GS_OPERATING_SYSTEM.Caption0 AS [Operating System], dbo.v_GS_OPERATING_SYSTEM.CSDVersion0 AS [Service Pack Level], 
                          dbo.v_GS_SYSTEM_ENCLOSURE_UNIQUE.SerialNumber0 AS [Serial Number], 
                          dbo.v_GS_SYSTEM_ENCLOSURE_UNIQUE.SMBIOSAssetTag0 AS [Asset Tag], dbo.v_GS_COMPUTER_SYSTEM.Manufacturer0 AS Manufacturer, 
                          dbo.v_GS_COMPUTER_SYSTEM.Model0 AS Model, dbo.v_GS_X86_PC_MEMORY.TotalPhysicalMemory0 AS [Memory (KBytes)], 
                          dbo.v_GS_PROCESSOR.NormSpeed0 AS [Processor (GHz)], 
                              (SELECT     SUM(dbo.v_GS_LOGICAL_DISK.Size0) AS Expr1 
                                FROM          dbo.v_GS_LOGICAL_DISK INNER JOIN 
                                                       dbo.v_FullCollectionMembership ON dbo.v_FullCollectionMembership.ResourceID = dbo.v_GS_LOGICAL_DISK.ResourceID 
                                WHERE      (dbo.v_GS_LOGICAL_DISK.ResourceID = dbo.v_R_System_Valid.ResourceID) AND 
                                                       (dbo.v_FullCollectionMembership.CollectionID = @CollectionID)) AS [Disk Space (MB)], 
                              (SELECT     SUM(v_GS_LOGICAL_DISK_2.FreeSpace0) AS Expr1 
                                FROM          dbo.v_GS_LOGICAL_DISK AS v_GS_LOGICAL_DISK_2 INNER JOIN 
                                                       dbo.v_FullCollectionMembership AS v_FullCollectionMembership_2 ON 
                                                       v_FullCollectionMembership_2.ResourceID = v_GS_LOGICAL_DISK_2.ResourceID 
                                WHERE      (v_GS_LOGICAL_DISK_2.ResourceID = dbo.v_R_System_Valid.ResourceID) AND 
                                                       (v_FullCollectionMembership_2.CollectionID = @CollectionID)) AS [Free Disk Space (MB)], 
                          dbo.v_RA_System_IPAddresses.IP_Addresses0, dbo.v_RA_System_IPSubnets.IP_Subnets0 
    FROM         dbo.v_R_System_Valid INNER JOIN 
                          dbo.v_GS_OPERATING_SYSTEM ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = dbo.v_R_System_Valid.ResourceID LEFT OUTER JOIN 
                          dbo.v_GS_SYSTEM_ENCLOSURE_UNIQUE ON 
                          dbo.v_GS_SYSTEM_ENCLOSURE_UNIQUE.ResourceID = dbo.v_R_System_Valid.ResourceID INNER JOIN 
                          dbo.v_GS_COMPUTER_SYSTEM ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_R_System_Valid.ResourceID INNER JOIN 
                          dbo.v_GS_X86_PC_MEMORY ON dbo.v_GS_X86_PC_MEMORY.ResourceID = dbo.v_R_System_Valid.ResourceID INNER JOIN 
                          dbo.v_GS_PROCESSOR ON dbo.v_GS_PROCESSOR.ResourceID = dbo.v_R_System_Valid.ResourceID INNER JOIN 
                          dbo.v_FullCollectionMembership AS v_FullCollectionMembership_1 ON 
                          v_FullCollectionMembership_1.ResourceID = dbo.v_R_System_Valid.ResourceID LEFT OUTER JOIN 
                          dbo.v_Site ON v_FullCollectionMembership_1.SiteCode = dbo.v_Site.SiteCode INNER JOIN 
                          dbo.v_GS_LOGICAL_DISK AS v_GS_LOGICAL_DISK_1 ON v_GS_LOGICAL_DISK_1.ResourceID = dbo.v_R_System_Valid.ResourceID AND 
                          v_GS_LOGICAL_DISK_1.DeviceID0 = SUBSTRING(dbo.v_GS_OPERATING_SYSTEM.WindowsDirectory0, 1, 2) INNER JOIN 
                          dbo.v_RA_System_IPSubnets ON dbo.v_R_System_Valid.ResourceID = dbo.v_RA_System_IPSubnets.ResourceID INNER JOIN 
                          dbo.v_RA_System_IPAddresses ON dbo.v_R_System_Valid.ResourceID = dbo.v_RA_System_IPAddresses.ResourceID LEFT OUTER JOIN 
                          dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP ON 
                          dbo.v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP.ResourceID = dbo.v_R_System_Valid.ResourceID 
    WHERE     (v_FullCollectionMembership_1.CollectionID = @CollectionID) AND IP_Addresses0 is not null
    ORDER BY [Computer Name]
    Собственно такой момент: если у машины есть несколько IP, то отчёт генерит 2 строчки с этой машиной и разными IP (т.е. 1 строка server1 IP 1.1.1.1, 2 строка server1 IP 1.1.1.2). Как объединить машины по имени? Я думал параметр DISTINCT это делает (по крайней мере вычитал), однако нет. Я подозреваю, что внутри нужна некая конструкция типа как с общим объёмом дисков в этом запросе. Можете подсказать?

    12 июля 2016 г. 9:25
  • Попробовал через Group by, но не получилось. В Group by потребовалось перечислить все переменные (v_R_System_Valid.Netbios_Name0, v_R_System_Valid.Resource_Domain_OR_Workgr0 и т.д.), иначе он отказывался применять изменения
    12 июля 2016 г. 9:49
  • так напишите под себя, что вам нужно. Каждый репорт можно редактировать.

    селектим, что нам нужно вытащить, цепляем v_r_system и v_gs_network_adapter_configuration по resource.ID и пустые поля не выводим. 

    Все представления v_gs_ это текущая инвентаризация, v_hs_ - история, _res_coll_ID - коллеции по ID.

    select distinct
    
    Netbios_Name0,
    Operating_System_Name_and0,
    IPAddress0,
    MACAddress0
    
    from v_r_system
    join v_GS_NETWORK_ADAPTER_CONFIGURATION on v_R_System.ResourceID = v_GS_NETWORK_ADAPTER_CONFIGURATION.ResourceID
    where IPAddress0 is not null


    SCCM Blog: http://masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/


    кстати при этом запросе так же происходит дублирование машин. Вопрос с сортировкой по прежнему актуален
    14 июля 2016 г. 11:14