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
Code Nr.2
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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 129210
Url: https://administrator.de/contentid/129210
Printed on: April 27, 2024 at 05:04 o'clock
5 Comments
Latest comment
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 ...
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