如何以编程方式查询SCCM 2012应用程序是否处于活动状态或已退役



我们有一个与SCCM 2012集成的应用程序,并将自定义SCCM应用程序保存到SCCM。

我遇到的问题是,当SCCM管理员将一个自定义应用程序设置为退役状态时,试图保存该应用程序会导致应用程序在保存过程中失败。

我希望能够查询SCCM应用程序状态,以便在尝试保存操作之前确定给定的应用程序是Active还是Retired。

我在SMS_Application Server WMI帮助或任何其他页面中找不到"退役"状态的参考:http://msdn.microsoft.com/en-us/library/hh949251.aspx

我注意到有一个Restore()方法,看起来它会将已退休包的状态更改为Active,但这并不是我想要做的。

谁能帮我确定如何找到一个应用程序的当前状态?

谢谢。

SCCM 2012 PowerShell cmdlet中有一种方法似乎正在检索过期状态。以下是c#代码(从SCCM服务器上的dll AppUI.PS.AppMan.dll反编译)

    private bool IsApplicationRetired(IResultObject applicaction)
    {
        IResultObject[] resultObjectArray = null;
        int integerValue = applicaction["CI_ID"].IntegerValue;
        object[] objArray = new object[] { integerValue };
        resultObjectArray = base.ExecuteQuery(string.Format(CultureInfo.InvariantCulture, "SELECT * FROM SMS_Application WHERE CI_ID = {0}", objArray));
        IResultObject[] resultObjectArray1 = resultObjectArray;
        int num = 0;
        if (num < (int)resultObjectArray1.Length)
        {
            IResultObject resultObject = resultObjectArray1[num];
            this.isApplicationRetired = resultObject["IsExpired"].BooleanValue;
        }
        if (this.isApplicationRetired)
        {
            object[] objArray1 = new object[] { integerValue };
            IResultObject instance = base.ConnectionManager.GetInstance(string.Format(CultureInfo.InvariantCulture, "SMS_Application.CI_ID={0}", objArray1));
            if (instance != null)
            {
                string stringValue = instance["ModelName"].StringValue;
                instance.Dispose();
                object[] objArray2 = new object[] { base.ConnectionManager.EscapeQueryString(stringValue, ConnectionManagerBase.EscapeQuoteType.SingleQuote) };
                resultObjectArray = base.ExecuteQuery(string.Format(CultureInfo.InvariantCulture, "SELECT CI_ID FROM SMS_Application WHERE ModelName = '{0}' AND IsLatest = 1 AND IsExpired = 0", objArray2));
                IResultObject[] resultObjectArray2 = resultObjectArray;
                int num1 = 0;
                if (num1 < (int)resultObjectArray2.Length)
                {
                    IResultObject resultObject1 = resultObjectArray2[num1];
                    if (resultObject1["CI_ID"].IntegerValue != integerValue)
                    {
                        this.isApplicationRetired = false;
                    }
                }
            }
        }
        return this.isApplicationRetired;
    }

相关内容

最新更新