Получение свойств из сложного запроса SQL в C # - PullRequest
0 голосов
/ 20 декабря 2018

Я запрашиваю базу данных SCCM для свойств пакета и приложения.Кажется, что если я использую простой запрос, я могу просматривать и получать доступ к свойствам.В более сложном запросе, где я назначаю имена переменных, чтобы разделить свойства, я не могу.

В приведенном ниже примере кода запрос пакетов выведет эти свойства, как и ожидалось.В запросе к приложениям все, что он знает, это либо AL, либо DT для имени, а значение возвращается как ManagementBaseObject.На самом деле, код после публикации будет падать каждый раз при распечатке этих значений свойств.

Очень запутанно, ценим любой вклад, чтобы заставить это работать.

using System;
using System.Management;


namespace Application
{

public class MainApplication
{

    static void Main(string[] args)
    {

        ManagementObjectCollection packages = GetPackages();

        ManagementObjectCollection applications = GetApplications();


        // * Works! *
        foreach (var package in packages)
        {
            Console.WriteLine("Package Name: {0} ", package.Properties["PackageName"].Value.ToString());
            Console.WriteLine("Package ID: {0} ", package.Properties["PackageID"].Value.ToString());
            Console.WriteLine("Setup Command: {0} ", package.Properties["CommandLine"].Value.ToString());
        }

        //  * Does not work! *
        foreach (var application in applications)
        {
            Console.WriteLine("Package Name: {0} ", application.Properties["AL.LocalizedDisplayName"].Value.ToString());
            Console.WriteLine("Package ID: {0} ", application.Properties["DT.ContentID"].Value.ToString());
            Console.WriteLine("Setup Command: {0} ", application.Properties["DT.LocalizedDescription"].Value.ToString());
        }

    }

    private static ManagementObjectCollection GetPackages()
    {

        String queryString = "SELECT PackageName,PackageID,CommandLine,Comment FROM SMS_Program WHERE Comment LIKE '%LISTMANUAL%' ORDER BY PackageName";

        ObjectQuery query = new ObjectQuery(queryString);

        ManagementScope scope = new ManagementScope("\\\\somebox.somedomain.com\\root\\sms\\site_DC1");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

        ManagementObjectCollection objectCollection = searcher.Get();


        Console.WriteLine(objectCollection.Count);

        return objectCollection;
    }


    private static ManagementObjectCollection GetApplications()
    {

        String queryString = "SELECT DT.LocalizedDisplayName,DT.LocalizedDescription,DT.AppModelName,DT.ContentID,AL.LocalizedDisplayName,AL.ModelName FROM SMS_DeploymentType AS DT JOIN SMS_ApplicationLatest AS AL on AL.ModelName=DT.AppModelName JOIN SMS_PackageToContent AS PTC on PTC.ContentUniqueID = DT.ContentID WHERE DT.IsLatest='TRUE' AND DT.LocalizedDescription LIKE '%LISTMANUAL%' ORDER BY AL.LocalizedDisplayName";

        ObjectQuery query = new ObjectQuery(queryString);

        ManagementScope scope = new ManagementScope("\\\\somebox.somedomain.com\\root\\sms\\site_DC1");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

        ManagementObjectCollection objectCollection = searcher.Get();

        Console.WriteLine(objectCollection.Count);

        return objectCollection;
    }

}

}

...