ManagementObjectSearcher.Scope 属性

定义

命名空间:

System.Management

程序集:

System.Management.dll

获取或设置要在其中查找对象的范围(该范围表示一个 WMI 命名空间)。

C#复制

public System.Management.ManagementScope Scope { get; set; }

属性值

ManagementScope

要在其中查找 WMI 对象 (命名空间) 范围。

示例

下面的示例 ManagementObjectSearcher 使用特定查询初始化类的新实例,然后更改实例的范围。

C#复制

using System;
using System.Management;

public class Sample
{
    public static void Main(string[] args)
    {
        ManagementScope ms = new ManagementScope(
            "\\\\.\\root\\cimv2");
        ms.Connect();
        ManagementObjectSearcher searcher =
            new ManagementObjectSearcher(
            "SELECT * FROM Win32_Service");
        searcher.Scope = ms;

        foreach (ManagementObject service in searcher.Get())
        {
            // show the service
            Console.WriteLine(service.ToString());
        }
    }
}

注解

更改此属性的值时, ManagementObjectSearcher 将重新绑定到新的作用域。

属性值

要在其中查找对象 (命名空间) 范围。

.NET Framework 安全性

对直接调用方的完全信任。 此成员不能由部分信任的代码使用。 有关详细信息,请参阅 从部分受信任的代码使用库

适用于

适用于
产品版本
.NET Framework1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Platform Extensions2.1, 2.2, 3.0, 3.1, 5.0, 6.0
### ManagementObjectSearcher 的使用方法 `ManagementObjectSearcher` 是 `System.Management` 命名空间下的一个类,用于执行 WMI(Windows Management Instrumentation)查询并返回结果集。此对象允许开发者通过编写类似于 SQL 的查询语句来获取有关操作系统及其组件的信息。 #### 创建实例与基本语法结构 要创建 `ManagementObjectSearcher` 实例,通常需要提供两个参数: - **Scope**: 定义了查询的作用域,默认情况下指向本地计算机的根 CIMV2 名称空间 (`root\cimv2`)。 - **Query**: 表达式字符串或者 `ObjectQuery` 对象,描述想要检索的数据。 对于简单的场景可以直接传递查询字符串给构造函数;而对于更复杂的查询,则建议先构建 `ObjectQuery` 或者其他派生自它的类的对象再传入。 ```csharp using System; using System.Management; namespace Example { public class Program { public static void Main() { // 使用 ManagementObjectSearcher 查询进程信息 using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process")) { foreach (var process in searcher.Get()) { Console.WriteLine($"Process Name: {process["Name"]}"); } } // 更复杂的情况可以通过指定 Scope 和 Query 来实现 var scope = new ManagementScope(@"\\.\root\cimv2"); string queryString = "SELECT Caption, Description FROM Win32_OperatingSystem"; ObjectQuery query = new ObjectQuery(queryString); using (var complexSearcher = new ManagementObjectSearcher(scope, query)) { foreach (var osInfo in complexSearcher.Get()) { Console.WriteLine($"{osInfo["Caption"]} - {osInfo["Description"]}"); } } } } } ``` 上述代码片段展示了两种不同的方式来初始化 `ManagementObjectSearcher` 并执行相应的操作[^1]。 #### 获取特定条件的结果 除了能够遍历所有匹配项外,还可以进一步筛选数据。比如只显示未启动的服务列表: ```csharp // 查找所有非运行状态的服务 string nonRunningServiceQuery = @"SELECT DisplayName FROM Win32_Service WHERE State='Stopped'"; using (var serviceSearcher = new ManagementObjectSearcher(nonRunningServiceQuery)) { foreach (var svc in serviceSearcher.Get()) { Console.WriteLine(svc["DisplayName"]); } } ``` 这段代码会打印出当前系统上处于停止状态的所有服务的名字[^2]。 #### 处理异常情况 当尝试访问不存在的资源或者其他错误发生时,可能会抛出各种类型的异常。为了使程序更加健壮,在实际应用中应当考虑加入适当的异常处理逻辑: ```csharp try { using (var searcher = new ManagementObjectSearcher("SELECT * FROM NonExistentClass")) { foreach (var item in searcher.Get()) {} } } catch (ManagementException ex) { Console.Error.WriteLine(ex.Message); } ``` 这里捕获到了由于试图查询一个不存在的 WMI 类而引发的 `ManagementException` 异常,并将其消息输出至标准错误流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值