在 Configuration Manager 中,可以通过查询 SMS 提供程序来读取站点服务器上的用户定义的状态消息。
读取用户定义的状态消息
设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识。
在提供程序中查询所需的 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 类
如何删除状态消息