Programmgesteuert auf den WMI-Anbieter zugreifen
Übersicht über WMI-Anbieter
Der Namespace, der zum Abrufen von Informationen zu Reporting Services in den codebeispielen in diesem Artikel verwendet wird, ist der System.Management-Namespace , der im Microsoft .NET Framework zu finden ist. Der System.Management-Namespace enthält mehrere verwalteter Codeklassen, über die .NET Framework-Anwendungen auf Verwaltungsdaten zugreifen und diese bearbeiten können. Weitere Informationen zur Verwendung der Reporting Services-WMI-Klassen mit dem System.Management-Namespace finden Sie unter "Access Management Information with System.Management" im Microsoft .NET Framework SDK.
Suchen einer Berichtsserverinstanz
Die bevorzugte Art der Suche nach Informationen auf Ihren Berichtsserverinstallationen besteht im Durchlaufen der WMI-Instanzenauflistung. Das folgende Beispiel zeigt, wie Sie Eigenschaften für jede Berichtsserverinstanz finden, indem Sie eine Auflistung erstellen und die Auflistung durchlaufen, um die Eigenschaften anzuzeigen.
Imports System
Imports System.Management
Imports System.IO
Module Module1
Sub Main()
Const WmiNamespace As String = "\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\Admin"
Const WmiRSClass As String = _
"\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v13\admin:MSReportServer_ConfigurationSetting"
Dim serverClass As ManagementClass
Dim scope As ManagementScope
scope = New ManagementScope(WmiNamespace)
'Connect to the Reporting Services namespace.
scope.Connect()
'Create the server class.
serverClass = New ManagementClass(WmiRSClass)
'Connect to the management object.
serverClass.Get()
If serverClass Is Nothing Then Throw New Exception("No class found")
'Loop through the instances of the server class.
Dim instances As ManagementObjectCollection = serverClass.GetInstances()
Dim instance As ManagementObject
For Each instance In instances
Console.Out.WriteLine("Instance Detected")
Dim instProps As PropertyDataCollection = instance.Properties
Dim prop As PropertyData
For Each prop In instProps
Dim name As String = prop.Name
Dim val As Object = prop.Value
Console.Out.Write("Property Name: " + name)
If val Is Nothing Then
Console.Out.WriteLine(" Value: <null>")
Else
Console.Out.WriteLine(" Value: " + val.ToString())
End If
Next
Next
Console.WriteLine("--- Press any key ---")
Console.ReadKey()
End Sub
End Module
using System;
using System.Management;
using System.IO;
[assembly: CLSCompliant(true)]
class Class1
{
[STAThread]
static void Main(string[] args)
{
const string WmiNamespace = @"\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v10\Admin";
const string WmiRSClass =
@"\\<ServerName>\root\Microsoft\SqlServer\ReportServer\<InstanceName>\v13\admin:MSReportServer_ConfigurationSetting";
ManagementClass serverClass;
ManagementScope scope;
scope = new ManagementScope(WmiNamespace);
// Connect to the Reporting Services namespace.
scope.Connect();
// Create the server class.
serverClass = new ManagementClass(WmiRSClass);
// Connect to the management object.
serverClass.Get();
if (serverClass == null)
throw new Exception("No class found");
// Loop through the instances of the server class.
ManagementObjectCollection instances = serverClass.GetInstances();
foreach (ManagementObject instance in instances)
{
Console.Out.WriteLine("Instance Detected");
PropertyDataCollection instProps = instance.Properties;
foreach (PropertyData prop in instProps)
{
string name = prop.Name;
object val = prop.Value;
Console.Out.Write("Property Name: " + name);
if (val != null)
Console.Out.WriteLine(" Value: " + val.ToString());
else
Console.Out.WriteLine(" Value: <null>");
}
}
Console.WriteLine("\n--- Press any key ---");
Console.ReadKey();
}
}