2013-12-13 81 views
1

我正在尋找將單個計算機腳本轉換爲批量使用腳本。它的功能允許我通過從文本文件中提取來選擇卸載Windows Essentials的哪些部分。但是,它正好位於它的前面,它只是提示輸入一個單一的計算機名稱...我希望它從已創建Computer_Names.txt的單獨文本文件中提取,然後在該列表中的所有計算機上運行卸載。我似乎無法弄清楚它的正確性。如何讓VBS從文本文件中讀取?

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個數字。

+0

請發佈文本文件的內容。 –

+0

剛剛編輯主要帖子來顯示。 – user3100777

回答

0

你可以做這樣的事情:

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 

這從文本文件加載數據到數組,然後循環的陣列。我認爲你以前遇到過一個文本流問題,而不是來回訪問,這就解釋了爲什麼它只處理第一臺計算機。

+0

對,我想擺脫輸入框。然而,我似乎無法得到它在Computer_Names中的第一行,通過卸載運行它,然後採取下一行,運行它......直到結束。 – user3100777

+0

獲取第5行,char 1.無效的過程調用或參數。如果太麻煩了,不要擔心,因爲我自己的編碼技能相當簡陋,所以我可能最終會以比我想要的更手動的方式來完成此操作。 – user3100777

+0

沒有在剪切中定義的ForReading常量。改爲1。應該管用。我不能在這裏完全複製它,所以我沒有軟件我想要安裝ATM。 –