Vbscript 将控制台输出写入文件

Vbscript 将控制台输出写入文件,vbscript,wmi,bios,Vbscript,Wmi,Bios,我试图用VBScript列出联想电脑的BIOS设置,并将结果写入文件。我已经到了可以将内容写入文本文件的地步,但是它只写入第一个设置记录。如何将所有设置逐个写入一个文件 On Error Resume Next Dim colItems, fso Set fso = WScript.CreateObject("Scripting.Filesystemobject") Set f = fso.CreateTextFile("bios-settings" & ".txt", True)

我试图用VBScript列出联想电脑的BIOS设置,并将结果写入文件。我已经到了可以将内容写入文本文件的地步,但是它只写入第一个设置记录。如何将所有设置逐个写入一个文件

On Error Resume Next
Dim colItems, fso

Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set f = fso.CreateTextFile("bios-settings" & ".txt", True)

strComputer = "LOCALHOST"
strOptions
Set objWMIService = GetObject("WinMgmts:" _
    &"{ImpersonationLevel=Impersonate}!\\" & strComputer & "\root\wmi")
Set colItems = objWMIService.ExecQuery("Select * from Lenovo_BiosSetting")

For Each objItem In colItems
    If Len(objItem.CurrentSetting) > 0 Then
        Setting = ObjItem.CurrentSetting
        StrItem = Left(ObjItem.CurrentSetting, InStr(ObjItem.CurrentSetting, ",") - 1)
        StrValue = Mid(ObjItem.CurrentSetting, InStr(ObjItem.CurrentSetting, ",") + 1, 256)

        Set selItems = objWMIService.ExecQuery("Select * from Lenovo_GetBiosSelections")
        For Each objItem2 In selItems
            objItem2.GetBiosSelections StrItem + ";", strOptions
        Next

        f.WriteLine StrItem
        f.WriteLine "  current setting  = " + StrValue
        f.WriteLine "  possible settings = " + strOptions
        f.WriteLine
    End If
    f.Close
Next
这是实际写入文件的部分:

f.WriteLine StrItem
f.WriteLine "  current setting  = " + StrValue
f.WriteLine "  possible settings = " + strOptions
f.WriteLine

它写入BIOS设置名称StrItem、当前设置值StrValue和可能的设置值strOptions。

您需要做的第一件事是删除

on error resume next
从你的剧本。这应该只在特定情况下用于错误处理,而不是作为偷懒开发人员的捷径

如果这样做,您将收到一个错误,抱怨无法写入已关闭的文件

这将导致实际错误,即在第一次写入后关闭文件

移动线路

f.Close

在您的for each循环之外,它可能会工作得更好。

谢谢!这起作用了。然而,当我删除on error resume next时,编译器抱怨第6行strOptions类型不匹配。有什么建议吗?当然,当启用返回错误恢复时,它会起作用。我只是想在将来完全了解它的原因,因为我只是在学习。你为什么会有这条线?它有什么作用?您应该只编写实际理解的代码。@name是存储在strOptions中的值的类型,可能无法转换为字符串。通过向循环中添加一行WScript.Echo typenamestropions进行检查。@AnsgarWiechers返回它确实是一个字符串类型变量。@nameis是在迭代过程中出现错误的地方吗?我对此表示严重怀疑。在上一次迭代中,该值是否为字符串无关紧要。