holger292
Goto Top

Zwei WMI Scripte kombinieren

Ich habe 2 WMI Scripte, welche nur zusammen 100% der Aufgabe erfüllen. Nun will ich beide zusammenführen.

Hi,


für meine Software Inventarisierung habe ich jetzt 2 Scripte, die beide nicht genau das machen, was ich will.

Script Nr. 1 liest zwar den falschen Pfad aus, aber erstellt eine Textdatei (.tsv) nach meinen Vorstellungen
Script Nr. 2 gibt mir alle Softwareeinträge aus dem richtigen Pfad einzeln in einer Messagebox aus.


Was ich brauche: Ein Script, welches den richtigen Registry Pfad ausliest (so wie Nummer 2) und mir dann anschließend diese Informationen in ein .tsv oder .txt Dokument ausgibt. (so wie Nr. 1 das kann)

Also: Alle Informationen aus Software\Microsoft\Windows\CurrentVersion\Uninstall\ in einer .tsv / .txt Datei, die ich später in Excel importieren kann. Der Dateiname soll den Namen des Rechners beinhalten. Und dann, wenn möglich, das Betriebssystem auslesen und ebenfalls als eine Zeile abspeichern.

Hier mal die beiden Codes:

Code Nr. 1

Set FSO = CreateObject("Scripting.FileSystemObject")  
strComputer = "."  
Const wbemFlagReturnImmediately = &H10
Const wbemFlagForwardOnly = &H20

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)  
For Each objItem In colItems
   strHostname = objItem.Name
Next

Set strOutDatei = FSO.CreateTextFile("\Server\Ordner\" & strHostname & ".tsv")  
strOutDatei.writeline "Computername" & vbtab & "Software" & vbtab & _  
   "Installationspfad" & vbtab & _  
   "Hersteller" & vbtab _  
   & "Version"  
Set colSoftware = objWMIService.ExecQuery ("SELECT * FROM Win32_Product")  
For Each objSoftware in colSoftware
      strOutDatei.WriteLine strHostname & vbtab & _
      objSoftware.Caption & vbtab & _
      objSoftware.InstallLocation & vbtab & _
      objSoftware.Vendor & vbtab & _
      objSoftware.Version
Next
strOutDatei.Close



Code Nr.2

strHost = "."  
Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & strHost & _  
    "/root/default:StdRegProv")  
Const strBaseKey = _
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\"  
objReg.EnumKey HKLM, strBaseKey, arrSubKeys
 
For Each strSubKey In arrSubKeys
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "DisplayName", strValue)  
    If intRet <> 0 Then
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "QuietDisplayName", strValue)  
    End If
    If (strValue <> "") and (intRet = 0) Then  
        WScript.Echo strValue
    End If
Next


Ich weiß nicht, ob das zu viel verlangt ist, aber es wäre genial wenn mir da jemand helfen könnte. Ich habe leider keine Ahnung von wmi und vbs und fange gerade erst damit an.
Wenn möglich, wäre eine Erklärung toll, damit ich das nächste Mal selbstständiger bin!

Vielen Dank,

Holger

Content-Key: 129210

Url: https://administrator.de/contentid/129210

Printed on: April 25, 2024 at 23:04 o'clock

Member: -ricardo-
-ricardo- Nov 12, 2009 at 11:43:32 (UTC)
Goto Top
Das zweite Script gibt aber nicht den Installations Pfad an ....
Member: Holger292
Holger292 Nov 12, 2009 at 12:16:54 (UTC)
Goto Top
Das ist egal!

Hauptsache ich hab den Namen der Software, der Rest ist nicht so wichtig!
Member: -ricardo-
-ricardo- Nov 12, 2009 at 12:36:36 (UTC)
Goto Top
strHost = "."  
Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & strHost & _  
    "/root/default:StdRegProv")  
Const strBaseKey = _
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\"  
objReg.EnumKey HKLM, strBaseKey, arrSubKeys

Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2")  
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)  
For Each objItem In colItems
   strHostname = objItem.Name
Next

 
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set strOutDatei = FSO.CreateTextFile("C:\" & strHostname & ".csv")  
strOutDatei.writeline "Computername" & vbtab & "Software"   

For Each strSubKey In arrSubKeys
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "DisplayName", strValue)  
    If intRet <> 0 Then
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "QuietDisplayName", strValue)  
    End If
    If (strValue <> "") and (intRet = 0) Then  
        strOutDatei.writeline strHostname & vbtab & strValue
    End If
Next


Müsstest nur noch den Pfad für die Datei anpassen ...
Member: Holger292
Holger292 Nov 12, 2009 at 13:23:51 (UTC)
Goto Top
Sehr gut. Jetzt fehlt mir nur noch ne Zeile fürs Betriebssystem. Wie finde ich das heraus?
Member: -ricardo-
-ricardo- Nov 12, 2009 at 13:53:03 (UTC)
Goto Top
Die infos findest du im Win32 _OperatingSystem ....

strHost = "."  
Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & strHost & _  
    "/root/default:StdRegProv")  
Const strBaseKey = _
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\"  
objReg.EnumKey HKLM, strBaseKey, arrSubKeys

Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2")  
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)  
For Each objItem In colItems
   strHostname = objItem.Name
Next

Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2")  
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)  
For Each objItem In colItems
   strHostname = objItem.Name
Next

Set colOperatingSystem = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")    
            For Each objOperatingSystem In colOperatingSystem
                OsName = objOperatingSystem.Caption
                OsServicePack = objOperatingSystem.CSDVersion
            Next

 
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set strOutDatei = FSO.CreateTextFile("C:\" & strHostname & ".csv")  
strOutDatei.writeline "Computername" & vbtab & "Betriebssystem" & vbtab & "Software"   

For Each strSubKey In arrSubKeys
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "DisplayName", strValue)  
    If intRet <> 0 Then
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _
        "QuietDisplayName", strValue)  
    End If
    If (strValue <> "") and (intRet = 0) Then  
        strOutDatei.writeline strHostname & vbtab & OsName & " " & OsServicePack & vbtab & strValue  
    End If
Next