在 C# 中格式化 WQL 输出

Formatting a WQL Output in C#

我正在尝试构建一个查询,以列出 SCCM 中具有特定名称的所有已知计算机。 查询如下所示:

string query = string.Format("Select Name From SMS_R_System Where Name like '" + "%" + computerName + "%" + "'");

如果找到结果,它会将结果放入下拉框中。

在这些情况下我的问题,输出如下所示:

"instance of SMS_R_System{Name = "DC01";};"

当然,对于我们的用例,我们只需要 DC01 作为输出。

有什么建议吗?

ButtonEvent 的完整代码:

   private void ChkBtn_Click(object sender, EventArgs e)
{
    string computerName = PCDropDown.Text;
    lBox.Items.Clear();

    SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
    WqlConnectionManager connection = new WqlConnectionManager(namedValues);
    // Connect to remote computer.
    try
    {
        connection.Connect(PrimarySiteServer.ToString());

        // Set the query.
        string query1 = string.Format("Select Name From SMS_R_System Where Name like '" + "%" + computerName + "%" + "'");
        string query2 = string.Format("Select * From SMS_UserMachineRelationship WHERE ResourceName like '" + "%" + computerName + "%" + "' AND IsActive = '1' AND Types = '1'");


        // Get the query results
        IResultObject queryResults = connection.QueryProcessor.ExecuteQuery(query1);

        // Check for results and display in infobox
        bool resultsFound = false;
        foreach (IResultObject queryResult in queryResults)
        {
            resultsFound = true;
            lBox.Items.Add("Rechner ist vorhanden");
            PCDropDown.Items.Add(queryResult.ToString());
        }
        if (resultsFound == false)
        {
            lBox.Items.Add("Rechnername nicht gefunden");
        }
    }
    catch
    {
        MessageBox.Show("No Connection to Config-Manager - Als ZZA ausgeführt? SCCM-Servername richtig?");
    }
}

而不是像您在此处那样添加 queryResult.ToString():

PCDropDown.Items.Add(queryResult.ToString());

您需要添加正确的查询结果字段,所以在这种情况下:

PCDropDown.Items.Add(queryResult["Name"].StringValue);

还有一个简短的说明。我不知道你在为谁写这篇文章以及下一步是什么,但如果这是一个只供 SCCM 管理员使用的只读应用程序,我会考虑忽略 WMI 并通过 SQL 转到 SCCM 数据库反而。它要快得多,SQL 有更强大的查询选项,它不需要集成那些奇怪的 sccm 控制台 Dll(尽管 WMI 也不是 100% 必需的)。

如果您需要写入权限来创建设备或集合等,或者您需要使用 sccm 访问权限系统实现的角色,但是 WMI 是更好的或唯一的选择。 (在这种情况下,我宁愿真正使用那些奇怪的 dll,因为所有 MS 示例都依赖于它们,并且很难将这些教程转换为 C# 提供的普通 WMI 解决方案。