【问题标题】:How to target multiple remote nodes in WQL?如何在 WQL 中定位多个远程节点?
【发布时间】:2019-05-20 10:36:07
【问题描述】:

我正在用 C# 创建一个服务,该服务使用 WMI 定期轮询 Active Directory 域中的远程主机。我一直在使用 System.Management.ManagementObjectSearcher,但到目前为止,我只能让它与本地主机一起使用。

例子:

private List<Disk> GetDisks()
{
    var disks = new List<Disk>();

    var searcher = new ManagementObjectSearcher("select deviceid, volumename, description, filesystem, freespace, size from win32_logicaldisk");
    foreach (var obj in searcher.Get())
    {
        var id = obj.Properties["deviceid"].Value.ToString();
        var name = obj.Properties["volumename"].Value.ToString();
        var description = obj.Properties["description"].Value.ToString();
        var fileSystem = obj.Properties["filesystem"].Value.ToString();
        var freeSpace = Convert.ToUInt64(obj.Properties["freespace"].Value);
        var totalSpace = Convert.ToUInt64(obj.Properties["size"].Value);

        var disk = new Disk(id, name, description, fileSystem, freeSpace, totalSpace);

        disks.Add(disk);
    }

    return disks;
}

但是,我有一个需要轮询的机器主机名列表。这可以通过 WMIC 轻松完成,如下所示:

wmic /node:"hostname1","hostname2","hostname3" logicaldisk get deviceid, volumename, description, filesystem, freespace, size /format:list

但我不知道如何在 C# 中做到这一点。

非常感谢任何帮助。

【问题讨论】:

    标签: c# wmi wmi-query


    【解决方案1】:

    您可以使用ORMi 创建多个 WMI 连接并获取您需要的信息。

    你可以这样做:

    //Supposing you got the info on a list of computers
    
    List<Computer> computers = new List<Computers>();
    
    foreach(Computer c in computers)
    {
        WMIHelper helper = new WMIHelper("root\\CimV2", c.WorkstationName);
    
        var info = helper.Query("select deviceid, volumename, description, filesystem, freespace, size from win32_logicaldisk").ToList();
    }
    

    有关更具体的数据,请参阅文档。

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 2022-09-28
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多