Vbscript 如何让VBS读取文本文件?

Vbscript 如何让VBS读取文本文件?,vbscript,wmi,uninstallation,wmi-query,Vbscript,Wmi,Uninstallation,Wmi Query,我想把一个单一的计算机脚本变成一个大规模使用的脚本。它的作用是允许我通过从文本文件中提取来选择要卸载的Windows Essentials的哪些部分。但是,当它运行时,它只会提示输入一个计算机名…我希望它从我创建的computer_Names.txt的单独文本文件中提取,并在该列表中的所有计算机上运行卸载。我就是不知道该怎么做 Const ForReading = 1 strComputer = InputBox("Enter the Computer Name:- ") Set objFS

我想把一个单一的计算机脚本变成一个大规模使用的脚本。它的作用是允许我通过从文本文件中提取来选择要卸载的Windows Essentials的哪些部分。但是,当它运行时,它只会提示输入一个计算机名…我希望它从我创建的computer_Names.txt的单独文本文件中提取,并在该列表中的所有计算机上运行卸载。我就是不知道该怎么做

Const ForReading = 1
strComputer = InputBox("Enter the Computer Name:- ") 

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("C:\Windows_Live_Components.txt", ForReading)
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")


StrOutput = "Uninstalled the following Software:- "
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
arrSoftwareList = Split(strNextLine , ",")
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = " & Chr(34) & arrSoftwareList(0) & Chr(34) )
For Each objSoftware in colSoftware
    objSoftware.Uninstall()
    strOutput = stroutput & vbCrLf & objsoftware.Name
Next
Loop
WScript.Echo strOutput
Computer_Names.txt文件的内容就是这样的。每台计算机都有一行单独的文本

LAPD2712
LAPD2812

我们所有的计算机名都是4个大写字母和4个数字。

您可以这样做:

Dim objFSO, objComponentsTextFile, objComputersTextFile, objWMIService, strComputer, StrOutput
Dim computerArray(), softwareArray, x
x = 0
Redim computerArray(x)


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objComponentsTextFile = objFSO.OpenTextFile ("C:\Windows_Live_Components.txt", 1)
Set objComputersTextFile = objFSO.OpenTextFile ("C:\Computers.txt", 1)

Do Until objComputersTextFile.AtEndOfStream
    computerArray(x) = objComputersTextFile.ReadLine
    x = x + 1
    Redim Preserve computerArray(x)
Loop

x = 0

softwareArray = Split(objComponentsTextFile.ReadLine, ",")

For Each computer in computerArray
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & computer & "\root\cimv2")
    StrOutput = "Uninstalled the following Software:- "
    For Each software in softwareArray
        Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = " & Chr(34) & software & Chr(34) )
        objSoftware.Uninstall()
        strOutput = strOutput & vbCrLf & objsoftware.Name 
    Next
    WScript.Echo strOutput
Next

这会将文本文件中的数据加载到数组中,然后在数组上循环。我想你以前遇到过一个问题,文本流在内域流的
AtTheEndOfStream
处不来回,这可以解释为什么它只处理第一台计算机。

请发布文本文件的内容。只需编辑主帖子来显示。对,我想去掉输入框。然而,我似乎无法让它在计算机名称中占据第一行,通过卸载运行它,然后占据下一行,运行它…直到结束。获取第5行,字符1。无效的过程调用或参数。如果它太麻烦,不要担心,我可能会以一种比我希望的更为手动的方式来完成,因为我自己的编码技能非常初级。在我的代码中没有定义ForReading常量。改为1。应该有用。我不能完全复制它在这里,所以我没有软件,我想安装ATM。几乎在那里它出现了。它不会抛出错误,但是它只在列表中的第一台计算机上工作。它确实在结尾正确地弹出了回音,说它卸载了程序,我点击OK,它弹出第二个回音,说它没有卸载任何程序。我以为可能是第二台目标计算机上的WMI问题,但我在Computers_List.txt中交换了它们,第一台计算机上的WMI又起作用了。你有足够的耐心吗?查看wscript.exe进程并了解其功能。显然,查询产品的速度非常慢