我正在尝试编写一个VBScript,它将在文本文件或csv中列出系统上所有已安装的应用程序.我能够找到现有代码列出所有软件(包括名称,版本,日期和大小).当我正在运行它时,因为我发现它回显了主机回声弹出.我需要添加什么来使其将每个回声输出到文件?我相信这很容易,但我似乎无法找到解决方案.
以下是我找到的脚本:
Dim fso Set fso = WScript.CreateObject("Scripting.Filesystemobject") ' List All Installed Software Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE strComputer = "." strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" strEntry1a = "DisplayName" strEntry1b = "QuietDisplayName" strEntry2 = "InstallDate" strEntry3 = "VersionMajor" strEntry4 = "VersionMinor" strEntry5 = "EstimatedSize" Set objReg = GetObject("winmgmts://" & strComputer & _ "/root/default:StdRegProv") objReg.EnumKey HKLM,strKey,arrSubkeys WScript.Echo "Installed Applications" & VbCrLf For Each strSubkey In arrSubkeys intRet1 = objReg.GetStringValue(HKLM,strKey & strSubkey,_ strEntry1a,strValue1) If intRet1 <> 0 Then objReg.GetStringValue HKLM,_ strEntry1b,strValue1 End If If strValue1 <> "" Then WScript.Echo VbCrLf & "Display Name: " & strValue1 End If objReg.GetStringValue HKLM,_ strEntry2,strValue2 If strValue2 <> "" Then WScript.Echo "Install Date: " & strValue2 End If objReg.GetDWORDValue HKLM,_ strEntry3,intValue3 objReg.GetDWORDValue HKLM,_ strEntry4,intValue4 If intValue3 <> "" Then WScript.Echo "Version: " & intValue3 & "." & intValue4 End If objReg.GetDWORDValue HKLM,_ strEntry5,intValue5 If intValue5 <> "" Then WScript.Echo "Estimated Size: " & Round(intValue5/1024,3) & " megabytes" End If Next
解决方法
解决此问题的一种方法是通过cscript.exe运行脚本并将输出重定向到文件:
cscript.exe //Nologo "C:\path\to\your.vbs" >"C:\output.txt"
如果要修改脚本以将其输出写入文件而不管其运行方式如何,则需要添加用于打开/关闭输出文件的代码:
Dim fso Set fso = WScript.CreateObject("Scripting.Filesystemobject") Set f = fso.OpenTextFile("C:\output.txt",2) ... f.Close 'End of Script
并用f.WriteLine替换每次出现的WScript.Echo.