如何读取User-Defined状态消息

在 Configuration Manager 中,可以通过查询 SMS 提供程序来读取站点服务器上的用户定义的状态消息。

读取用户定义的状态消息

  1. 设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识

  2. 在提供程序中查询所需的 SMS_StatusMessage 实例。 作为查询的一部分,从 SMS_SMS_StatMsgInStrings 获取插入字符串值和 从 SMS_StatMsgAttributes获取属性值。

示例

以下示例读取 如何使用 WMI 报告User-Defined状态消息中创建的示例的错误消息状态消息。 确保 MyPackageID 查询中的 和 MyApplication 值在这两个示例中都匹配。

有关调用示例代码的信息,请参阅调用Configuration Manager代码片段

Sub ReadErrorStatusMesage(connection)  

    Dim queryWQL  
    Dim message  
    Dim messageSet  
    Dim statusMessage  
    Dim insertionString  
    Dim attributes  

    queryWQL = "SELECT b.Component, b.MachineName, b.MessageType, b.MessageID, " & _  
            "       c.InsStrValue, d.AttributeValue " & _  
            "FROM SMS_StatusMessage b " & _  
            "     JOIN SMS_StatMsgInsStrings c ON b.RecordID = c.RecordID " & _  
            "     JOIN SMS_StatMsgAttributes d ON c.RecordID = d.RecordID " & _  
            "WHERE b.Component = 'MyApplication' " & _  
            "AND   d.AttributeID = 400 " & _  
            "AND   d.AttributeValue = 'MyPackageID' "  

    Set messageSet = connection.ExecQuery(queryWQL)  

    For Each message in messageSet  

        ' Get the message objects.  
        statusMessage = message.Properties_.Item("b")  
        insertionString = message.Properties_.Item("c")  
        attributes = message.Properties_.Item("d")  

        ' Display the message details.  
        WScript.Echo "Message: " + insertionString.Properties_.Item("insstrvalue")  
        WScript.Echo "Component: " + statusMessage.Properties_.Item("Component")  
        WScript.Echo "Computer: " + statusMessage.Properties_.Item("MachineName")  
        WScript.Echo "MessageID: " + Cstr(statusMessage.Properties_.Item("MessageID"))  
        WScript.Echo attributes.Properties_.Item("attributevalue")  
        WScript.Echo  

    Next                          

 End Sub  

public void ReadErrorStatusMessage(WqlConnectionManager connection)  
{  
    try  
    {  
        string queryWQL = "SELECT b.Component, b.MachineName, " +  
                "       b.MessageType, b.MessageID, " +  
                "       c.insstrvalue, d.attributevalue " +  
                "FROM SMS_StatusMessage b " +  
                "     JOIN SMS_StatMsgInsStrings c ON b.RecordID = c.RecordID " +  
                "     JOIN SMS_StatMsgAttributes d ON c.RecordID = d.RecordID " +  
                "WHERE b.Component = \"MyApplication\" " +   
                "AND   d.AttributeID = 400 " +  
                "AND   d.AttributeValue = \"MyPackageID\" ";  

        IResultObject query = connection.QueryProcessor.ExecuteQuery(queryWQL);  
        foreach (IResultObject o in query)  
        {  

            ManagementBaseObject  statusMessage = (ManagementBaseObject)o["b"].ObjectValue;  
            ManagementBaseObject insertionString = (ManagementBaseObject)o["c"].ObjectValue;  
            ManagementBaseObject attributes = (ManagementBaseObject)o["d"].ObjectValue;  

            Console.WriteLine("Message: " + insertionString["insstrvalue"]);  
            Console.WriteLine("Component: " + statusMessage["Component"]);  
            Console.WriteLine("Computer: " + statusMessage["MachineName"]);  
            Console.WriteLine("MessageID: " + statusMessage["MessageID"]);  
            Console.WriteLine(attributes["attributevalue"]);  
            Console.WriteLine();  
        }  
    }  
    catch (SmsException ex)  
    {  
        Console.WriteLine("Failed to read status message: ", ex.Message);  
        throw;  
    }  
}  

示例方法具有以下参数:

参数 类型 说明
connection - 托管: WqlConnectionManager
- VBScript: SWbemServices
与 SMS 提供程序的有效连接。 有关详细信息,请参阅 SMS 提供程序基础知识

编译代码

此 C# 示例需要:

命名空间

System

System.Collections.Generic

System.Text

System.Management

Microsoft。ConfigurationManagement.ManagementProvider

Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

System.Management

可靠编程

有关错误处理的详细信息,请参阅关于Configuration Manager错误

.NET Framework 安全性

有关保护Configuration Manager应用程序的详细信息,请参阅Configuration Manager基于角色的管理

另请参阅

关于Configuration Manager状态消息
如何报告User-Defined状态消息
SMS_StatusMessage服务器 WMI 类
如何删除状态消息