【问题标题】:Formatting a WQL Output in C#在 C# 中格式化 WQL 输出
【发布时间】:2017-11-08 17:14:34
【问题描述】:

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

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

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

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

"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?");
    }
}

【问题讨论】:

  • 你是如何执行查询的?发布完整代码
  • 嘿 Nico,我写了一个新答案,因为代码太长了。谢谢

标签: c# visual-studio sccm wql


【解决方案1】:

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

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

你需要添加正确的queryResult字段,所以在这种情况下:

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

还有一个简短的说明。我不知道您正在为谁编写此内容以及下一步将是什么,但如果这是一个仅供 SCCM 管理员使用的只读应用程序,我会考虑忽略 WMI 并通过 SQL 转到 SCCM DB。它速度更快,SQL 具有更强大的查询选项,并且不需要集成那些奇怪的 sccm 控制台 Dll(尽管 WMI 也不是 100% 必需的)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多