After some more crunching on my VBscript, I think I finally have a working script that runs through a csv-list I point it to and walk onto each system (by ip-address only sadly) and query the os and the Service Pack that is installed. The CSV may look like this:
1 2 3 |
Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority epimetheus;10.0.0.2;VMware guest;File-Server hades;10.0.0.1;VMware guest;Core-Router |
After saving that one, and running a cscript //NoLogo win_sp_level.vbs you should find a completed list like this:
1 2 3 |
Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority epimetheus;10.0.0.2;VMware guest;File-Server;Windows Server 2003 Standard x64 Edition; SP1;; hades;10.0.0.1;VMware guest;Core-Router;Windows Server 2003 Enterprise Edition; SP0;; |
The final script looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemOBject") If objFSO.FileExists("Rollout_SP2.csv") = 0 Then CleanUp() Wscript.Quit End If Set CSVin = objFSO.OpenTextFile("Rollout_SP2.csv", 1) CSVin_read = CSVin.ReadLine Set objFile = objFSO.CreateTextFile("Rollout_SP2_result.csv") Set objFile = nothing Set CSVout = objFSO.OpenTextFile("Rollout_SP2_result.csv", 8) CSVout.WriteLine("Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority") Do While CSVin.AtEndofStream <> True Dim os, servicepack Dim user, password os = nothing servicepack = nothing user = vars(1) & "chrischie" password = "hah-this-password-is-easy" current_line = CSVin.ReadLine vars = Split(current_line, ";") Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer _ (vars(1), "rootcimv2", user, password, "MS_409",, 128) objSWbemServices.Security_.ImpersonationLevel = 3 Set colOperatingSystems = objSWbemServices.ExecQuery _ ("Select * from Win32_OperatingSystem") ' The set returns an Err.Number of 91 on success ' Don't ask me why though. If Err.Number <> 91 Then CSVout.WriteLine(vars(0) & ";" & vars(1) & ";" & vars(2) & ";" & vars(3) & ";NA;SP?;;") Else For Each objOperatingSystem in colOperatingSystems os = objOperatingSystem.Caption servicepack = objOperatingSystem.ServicePackMajorVersion Next CSVout.WriteLine(vars(0) & ";" & vars(1) & ";" & vars(2) & ";" & vars(3) _ & ";" & os & "; SP" & servicepack & ";;") End If Loop |
The only thing I still need to improve is the error handling (as in notify when a system is being skipped due to RPC being unavailable).