none
Запрос в коллекции на установленный софт, запрос на исключение. RRS feed

  • Вопрос

  • Приветствую!
    Хочу реализовать автоматизацию установки софта, путем прохождения хоста из коллекции в коллекцию.
    Не получается только сделать запрос, который будет выбирать хосты из базы при условии, что какая-то определенная программа (к примеру, MOM-агент) не установлена. Если программы нет, то хост "заходит" в коллекцию, получает софт и "выходит".
    Проблема в том, что если я делаю запрос следующего вида

    SMS_G_System_SoftwareProduct.ProductName not like "%Agent"

    то в коллекции вываливаются все хосты, включая те, у которых программа установлена.

    А если

    SMS_G_System_SoftwareProduct.ProductName is like "%Agent"


    то, соответственно, выводится список хостов с установленной программой.

    Можно ли с помощью WQL (как я понял это встоеный язык SMS) сделать запрос, который будет выводить список хостов без определенно установленной программы? В самой базе запрос я такой делал, но SQL запрос коллекция не понимает.

    Подобное я сделал с сервис паками (сейчас работает), но там идет запрос на конкретную версию, а не на отсутствие SP.

    Заранее благодарен.
    11 ноября 2008 г. 7:56

Ответы

  •  

    Привет

    Доолжно быть так:

    select SMS_R_System.ResourceID,SMS_R_System.ResourceType,SMS_R_System.Name,SMS_R_System.SMSUniqueIdentifier,SMS_R_System.ResourceDomainORWorkgroup,SMS_R_System.Client from SMS_R_System where not ResourceId in (select SMS_R_System.ResourceID from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId where  SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "ABBYY Finereader 8%")

    У меня две коллекции.

    Первая, верхнего уровня, строится по принадлежности группе ФайнридерЮзер в АД.

    В ней субколлекция, которая вышеприведеным запросом выбирает те компы, где файнридер не установлен. И есть адвертайзмент натравленый на субколлекцию.

    После инсталляции - комп покидает данную субколлекцию

     

    Александр

    11 ноября 2008 г. 11:42

Все ответы

  •  

    Привет

    Доолжно быть так:

    select SMS_R_System.ResourceID,SMS_R_System.ResourceType,SMS_R_System.Name,SMS_R_System.SMSUniqueIdentifier,SMS_R_System.ResourceDomainORWorkgroup,SMS_R_System.Client from SMS_R_System where not ResourceId in (select SMS_R_System.ResourceID from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId where  SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "ABBYY Finereader 8%")

    У меня две коллекции.

    Первая, верхнего уровня, строится по принадлежности группе ФайнридерЮзер в АД.

    В ней субколлекция, которая вышеприведеным запросом выбирает те компы, где файнридер не установлен. И есть адвертайзмент натравленый на субколлекцию.

    После инсталляции - комп покидает данную субколлекцию

     

    Александр

    11 ноября 2008 г. 11:42
  • Спасибо за ответ.
    Буду использовать этот запрос.
    Мне снаало казалось, что в sms нельзя запрос в запросе делать.

    Но вот что я налепил в самой базе:


    SELECT DISTINCT
    cm.MachineID, cm.ArchitectureKey, cm.Name, cm.SMSID, cm.SiteCode, cm.Domain, cm.ClientType, cm.IsDirect, cm.IsAssigned, cm.IsClient,
    cm.IsObsolete, cm.IsActive, cm.IsDecommissioned, cm.AMTStatus, cm.AMTFullVersion, cm.SuppressAutoProvision, ck.ApprovalStatus AS IsApproved,
    ck.IsRevoked AS IsBlocked, ck.AlwaysInternet AS IsAlwaysInternet, ck.InternetEnabled AS IsInternetEnabled
    FROM dbo.CollectionMembers AS cm INNER JOIN
    dbo.v_Add_Remove_Programs ON cm.MachineID = dbo.v_Add_Remove_Programs.ResourceID LEFT OUTER JOIN
    dbo.ClientKeyData AS ck ON cm.SMSID = ck.SMSID
    WHERE (cm.SiteID = 'SMS00001') AND (NOT (dbo.v_Add_Remove_Programs.ResourceID IN
    (SELECT ResourceID
    FROM dbo.v_Add_Remove_Programs AS v_Add_Remove_Programs_1
    WHERE (DisplayName0 LIKE '%Agent'))))

    это тоже работает кажется. Так же идет выборка по SQL, а в коллекции потом видно что и как.
    Спасибо.
    11 ноября 2008 г. 12:25
  • Господа,
    есть еще более простой способ однозначно определить стоит ПО но компе или не стоит. Делается это с помощью GUID (
    Globally Unique Identifier — представляет собой статистически уникальный 128-битный идентификатор) данного ПО, сведенья о котором содержатся в реестре. Естественно, что свой GUID есть и у агента SCOM, а посмотреть его можна тут:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

    Пример запроса в СМС:
    select ResourceID from  SMS_G_System_ADD_REMOVE_PROGRAMS where ProdID = "{12345678-1234-1234-1234-1234567890123}"

    пробуйте

    П.С. по маске %Agent, как предложено у Вас кроме собсно агента SCOM может выпасть еще много чего, потому такой способ не считаю наилучшим
    12 ноября 2008 г. 13:24