【问题标题】:Sorting a WMI-result in C#在 C# 中对 WMI 结果进行排序
【发布时间】:2021-07-26 20:38:54
【问题描述】:

我想检查最后一次 Windows 更新是否成功。原则上,这是可行的。 问题是,日期不对。如果按最后日期对结果进行排序并使用 desc / asc,我想我可以解决这个问题。我不知道该怎么做。如果我使用 MySQL,我可以使用“... order by column desc / asc”,但这似乎不适用于 C#/WMI。谁能帮帮我。到目前为止,这是我的代码:

try
{
    var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
    using (ManagementObjectCollection managementObjectCollection = searcher.Get())
    {
        ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().First();
        string stringDate = managementObject["InstalledOn"].ToString();
        string format = "M/d/yyyy";
        CultureInfo provider = CultureInfo.InvariantCulture;
        DateTimeOffset result = new DateTimeOffset();
        result = DateTimeOffset.ParseExact(stringDate, format, provider, DateTimeStyles.AssumeUniversal);
        systemLastWindowsUpdate = result.ToString("yyyy-MM-dd");
    }
}
catch (Exception)
{
    MessageBox.Show("Problem in Windows Update");
}

【问题讨论】:

    标签: c# wmi


    【解决方案1】:

    您的代码编写效率很低,尤其是您的问题是您从未处理过保存操作系统句柄的搜索器对象。也就是说,您的问题的答案很简单:如果您想要最后日期,只需查看所有日期并选择最大值。

    using System;
    using System.Linq;
    using System.Management;
    
    using var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
    using var managementObjectCollection = searcher.Get();
    
    var maxDate = managementObjectCollection.OfType<ManagementObject>().Max(w => DateTime.Parse((string)w["InstalledOn"]));
    Console.WriteLine(maxDate.ToString("yyyy-MM-dd"));
    

    【讨论】:

    • 谢谢你,但没用。我认为这是因为我有德国窗户。这就是为什么我重新格式化日期的原因。
    • “它不起作用”没有任何意义。而且您不需要“重新格式化”日期,DateTimeDateTime,无论语言环境如何。事实上,因为你知道你使用不同的格式,你应该避免像瘟疫那样的日期文本格式,而不是加倍使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多