如何在WQL中定位多个远程节点?

时间:2019-05-20 10:36:08

标签: c# wmi wmi-query

我正在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#中做到这一点。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用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();
}

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