Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Zwei WMI Scripte kombinieren

Frage Entwicklung

Mitglied: Holger292

Holger292 (Level 1) - Jetzt verbinden

12.11.2009 um 11:36 Uhr, 3163 Aufrufe, 5 Kommentare

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

01.
Set FSO = CreateObject("Scripting.FileSystemObject") 
02.
strComputer = "." 
03.
Const wbemFlagReturnImmediately = &H10 
04.
Const wbemFlagForwardOnly = &H20 
05.
 
06.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
07.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
08.
For Each objItem In colItems 
09.
   strHostname = objItem.Name 
10.
Next 
11.
 
12.
Set strOutDatei = FSO.CreateTextFile("\Server\Ordner\" & strHostname & ".tsv") 
13.
strOutDatei.writeline "Computername" & vbtab & "Software" & vbtab & _ 
14.
   "Installationspfad" & vbtab & _ 
15.
   "Hersteller" & vbtab _ 
16.
   & "Version" 
17.
Set colSoftware = objWMIService.ExecQuery ("SELECT * FROM Win32_Product") 
18.
For Each objSoftware in colSoftware 
19.
      strOutDatei.WriteLine strHostname & vbtab & _ 
20.
      objSoftware.Caption & vbtab & _ 
21.
      objSoftware.InstallLocation & vbtab & _ 
22.
      objSoftware.Vendor & vbtab & _ 
23.
      objSoftware.Version 
24.
Next 
25.
strOutDatei.Close


Code Nr.2

01.
strHost = "." 
02.
Const HKLM = &H80000002 
03.
Set objReg = GetObject("winmgmts://" & strHost & _ 
04.
    "/root/default:StdRegProv") 
05.
Const strBaseKey = _ 
06.
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\" 
07.
objReg.EnumKey HKLM, strBaseKey, arrSubKeys 
08.
  
09.
For Each strSubKey In arrSubKeys 
10.
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
11.
        "DisplayName", strValue) 
12.
    If intRet <> 0 Then 
13.
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
14.
        "QuietDisplayName", strValue) 
15.
    End If 
16.
    If (strValue <> "") and (intRet = 0) Then 
17.
        WScript.Echo strValue 
18.
    End If 
19.
Next 
20.
 

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
Mitglied: -ricardo-
12.11.2009 um 12:43 Uhr
Das zweite Script gibt aber nicht den Installations Pfad an ....
Bitte warten ..
Mitglied: Holger292
12.11.2009 um 13:16 Uhr
Das ist egal!

Hauptsache ich hab den Namen der Software, der Rest ist nicht so wichtig!
Bitte warten ..
Mitglied: -ricardo-
12.11.2009 um 13:36 Uhr
01.
strHost = "." 
02.
Const HKLM = &H80000002 
03.
Set objReg = GetObject("winmgmts://" & strHost & _ 
04.
    "/root/default:StdRegProv") 
05.
Const strBaseKey = _ 
06.
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\" 
07.
objReg.EnumKey HKLM, strBaseKey, arrSubKeys 
08.
 
09.
Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2") 
10.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
11.
For Each objItem In colItems 
12.
   strHostname = objItem.Name 
13.
Next 
14.
 
15.
  
16.
Set FSO = CreateObject("Scripting.FileSystemObject") 
17.
Set strOutDatei = FSO.CreateTextFile("C:\" & strHostname & ".csv") 
18.
strOutDatei.writeline "Computername" & vbtab & "Software"  
19.
 
20.
For Each strSubKey In arrSubKeys 
21.
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
22.
        "DisplayName", strValue) 
23.
    If intRet <> 0 Then 
24.
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
25.
        "QuietDisplayName", strValue) 
26.
    End If 
27.
    If (strValue <> "") and (intRet = 0) Then 
28.
        strOutDatei.writeline strHostname & vbtab & strValue 
29.
    End If 
30.
Next 
31.
 

Müsstest nur noch den Pfad für die Datei anpassen ...
Bitte warten ..
Mitglied: Holger292
12.11.2009 um 14:23 Uhr
Sehr gut. Jetzt fehlt mir nur noch ne Zeile fürs Betriebssystem. Wie finde ich das heraus?
Bitte warten ..
Mitglied: -ricardo-
12.11.2009 um 14:53 Uhr
Die infos findest du im Win32 _OperatingSystem ....

01.
strHost = "." 
02.
Const HKLM = &H80000002 
03.
Set objReg = GetObject("winmgmts://" & strHost & _ 
04.
    "/root/default:StdRegProv") 
05.
Const strBaseKey = _ 
06.
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\" 
07.
objReg.EnumKey HKLM, strBaseKey, arrSubKeys 
08.
 
09.
Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2") 
10.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
11.
For Each objItem In colItems 
12.
   strHostname = objItem.Name 
13.
Next 
14.
 
15.
Set objWMIService = GetObject("winmgmts:\\" & strHost & "\root\CIMV2") 
16.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 
17.
For Each objItem In colItems 
18.
   strHostname = objItem.Name 
19.
Next 
20.
 
21.
Set colOperatingSystem = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")   
22.
            For Each objOperatingSystem In colOperatingSystem 
23.
                OsName = objOperatingSystem.Caption 
24.
                OsServicePack = objOperatingSystem.CSDVersion 
25.
            Next 
26.
 
27.
  
28.
Set FSO = CreateObject("Scripting.FileSystemObject") 
29.
Set strOutDatei = FSO.CreateTextFile("C:\" & strHostname & ".csv") 
30.
strOutDatei.writeline "Computername" & vbtab & "Betriebssystem" & vbtab & "Software"  
31.
 
32.
For Each strSubKey In arrSubKeys 
33.
    intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
34.
        "DisplayName", strValue) 
35.
    If intRet <> 0 Then 
36.
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ 
37.
        "QuietDisplayName", strValue) 
38.
    End If 
39.
    If (strValue <> "") and (intRet = 0) Then 
40.
        strOutDatei.writeline strHostname & vbtab & OsName & " " & OsServicePack & vbtab & strValue 
41.
    End If 
42.
Next 
43.
 
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst WMI-Filter Syntax (10)

Frage von DasWombat1993 zum Thema Windows Server ...

Windows Systemdateien
WMI Notofication Query Access denied 0x80041003

Frage von 124611 zum Thema Windows Systemdateien ...

Batch & Shell
gelöst VBscript - WMI - ServerAddress + ConnectionStatus (Windows 7) (10)

Frage von Highend01 zum Thema Batch & Shell ...

Batch & Shell
gelöst Dienst Stoppen und deaktivieren per Powershell und WMI auf remote Server (1)

Frage von pixel0815 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...