0

我正在查询 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;
    }

}

}

4

0 回答 0