要使用WMI通过vb.net监视SMART吗

要使用WMI通过vb.net监视SMART吗,vb.net,wmi,disk-smart,Vb.net,Wmi,Disk Smart,代码如下: For Each queryObj As ManagementObject In searcher.Get() objWriter = New StreamWriter("C:\vsl\scripts\results.txt", False) objWriter.Write("Active: {0} ", queryObj("Active")) objWriter.Write(" InstanceName: {0} ", queryObj("InstanceN

代码如下:

For Each queryObj As ManagementObject In searcher.Get()
    objWriter = New StreamWriter("C:\vsl\scripts\results.txt", False)
    objWriter.Write("Active: {0} ", queryObj("Active"))
    objWriter.Write(" InstanceName: {0} ", queryObj("InstanceName"))
    objWriter.Write(" PredictFailure: {0} ", queryObj("PredictFailure"))
    objWriter.Write(" Reason: {0} ", queryObj("Reason"))
    objWriter.Close()
Next
似乎从我唯一的内部IDE驱动器获取数据

有两件事我不明白

  • 如果在第一组引号之间更改数据,则行objWriter.Write(“活动:{0}”、queryObj(“活动”)将不起作用。因此,将Active:{0}更改为Active:{1}会导致Try-Catch无法捕获的错误(此for…next在Try-Catch中)。我假设引号中的内容只是文本,可以更改为任何内容?为什么不试着抓住它

  • 连接时不读取USB外部驱动器。这就是我发现上面第1项的原因。。。我将{0}更改为{1},它崩溃了


  • 您需要发布更多代码来帮助我们处理#2,例如如何定义
    searcher

    但你的第一个问题很简单。字符串
    {0}
    是标准的替换语法。如果您写了以下内容:

    objWriter.Write("Hello {0}, my name is {1}", "Alice", "Bob")
    
    它将写下:

    Hello Alice, my name is Bob
    
    {0}
    表示初始字符串后的第一项(在编程中,数字从零开始,因此第一项为零,第二项为一,以此类推)。在您的例子中,
    {0}
    将被
    queryObj(“Active”)
    返回的任何内容替换

    您通常可以拥有任意数量的
    {X}
    ,只要您有值来备份它们。有更多的值是可以的,有太少是一个错误,这是你遇到的

    这没关系,因为最后一个(“Bob”)被忽略了:

    objWriter.Write("Hello {0}", "Alice", "Bob")
    
    但这是不好的,因为我们没有任何东西可以填写
    {1}

    objWriter.Write("Hello {0}, my name is {1}", "Alice")