holger292
Goto Top

in WMI Computernamen abfragen

Es geht darum, per WMi Script den Computernamen in den Titel einer Textdatei auf ein Laufwerk zu schreiben.

Hi,

ich benutze folgendes WMI Script, um an die installierte Software auf Netzwerkcomputern zu kommen. Das Script wird beim Systemstart ausgeführt und schreibt eine Textdatei auf ein Netzlaufwerk. Jetzt wollte ich nur den Dateinamen durch den jeweiligen Computernamen ersetzen, allerdings komm ich nicht wirklich weiter. Hab schon mit Systemvariablen wie %Computername% rumexperimentiert, bringt aber irgendwie nix.

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objTextFile = objFSO.CreateTextFile("X:\Inventarisierung\[COLOR="Red"]COMPUTERNAME[/COLOR].tsv", True)  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colSoftware = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Product")  
objTextFile.WriteLine "Caption" & vbtab & _  
"Description" & vbtab & "Identifying Number" & vbtab & _  
"Install Date" & vbtab & "Install Location" & vbtab & _  
"Install State" & vbtab & "Name" & vbtab & _  
"Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _  
 & "Version"  
For Each objSoftware in colSoftware
 objTextFile.WriteLine objSoftware.Caption & vbtab & _
 objSoftware.Description & vbtab & _
 objSoftware.IdentifyingNumber & vbtab & _
 objSoftware.InstallLocation & vbtab & _
 objSoftware.InstallState & vbtab & _
 objSoftware.Name & vbtab & _
 objSoftware.PackageCache & vbtab & _
 objSoftware.SKUNumber & vbtab & _
 objSoftware.Vendor & vbtab & _
 objSoftware.Version
Next
objTextFile.Close


Ich habe mal gegoogelt und folgende Funktion gefunden:
Function GetComputerName()
        On Error Resume Next
        Set OpSysSet = GetObject("winmgmts:\root\cimv2").ExecQuery("select * from Win32_ComputerSystem")  
        For each i in OpSysSet
                GetComputerName = i.Name
        Next
End Function

Ich muss dazu sagen, dass ich mit WMI und vbs bisher nichts zu tun hatte. Ich weiß nicht wirklich, wie ich die beiden Codes jetzt zusammenbekomme.

Und dann gleich noch ne Frage: Wie kann ich viele TSV Dateien zu einer großen Excel Tabelle zusammenfügen? Also praktisch alle Datensätze direkt hintereinander schreiben? (Aber erst im Nachhinein, ich will trotzdem für jeden PC zusätzlich ne eigene Datei haben)

Danke schonmal! face-smile


[Edit Biber] Codetags nachgetragen. [/Edit]

Content-Key: 129125

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

Printed on: April 24, 2024 at 16:04 o'clock

Member: SamTrex
SamTrex Nov 11, 2009 at 12:00:40 (UTC)
Goto Top
Hallo Holger,
das geht am einfachsten über vbs. Kannst du so in deinem Script einsetzen:

dim objNET
set objNET = createobject("wscript.network")  
strComputer = objNET.computername

oder du liest die Systemvariable aus (kannst du auch so einsetzen):

dim objshell
set objshell = createobject("wscript.shell")  
strComputer = objshell.environment("process")("computername")  

Gruß Sam

/Edit:
Meinst du CSV - Dateien? TSV sagt mir nichts.
Wie sieht denn der Inhalt derer aus? Immer nur eine Zeile? Gib doch mal ein Beispiel der Datei...
Member: Iwan
Iwan Nov 11, 2009 at 12:15:38 (UTC)
Goto Top
TSV = Tab Separated Values

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("D:\Ergebnis\" & strHostname & ".tsv")  
strOutDatei.writeline "Caption" & vbtab & _  
   "Description" & vbtab & "Identifying Number" & vbtab & _  
   "Install Date" & vbtab & "Install Location" & vbtab & _  
   "Install State" & vbtab & "Name" & vbtab & _  
   "Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _  
   & "Version"  
Set colSoftware = objWMIService.ExecQuery ("SELECT * FROM Win32_Product")  
For Each objSoftware in colSoftware
   strOutDatei.WriteLine objSoftware.Caption & vbtab & _
      objSoftware.Description & vbtab & _
      objSoftware.IdentifyingNumber & vbtab & _
      objSoftware.InstallLocation & vbtab & _
      objSoftware.InstallState & vbtab & _
      objSoftware.Name & vbtab & _
      objSoftware.PackageCache & vbtab & _
      objSoftware.SKUNumber & vbtab & _
      objSoftware.Vendor & vbtab & _
      objSoftware.Version
Next
strOutDatei.Close
Wscript.Echo "Fertig!"  
Member: Holger292
Holger292 Nov 11, 2009 at 12:48:59 (UTC)
Goto Top
Prima, vielen Dank euch Beiden! Hat funktioniert!

Bleibt noch die Frage, wie ich die erstellten tsv Dateien in ein großes Excel Dokument vereinen kann. Die müssen nur untereinander stehen, mehr nicht.
Member: Iwan
Iwan Nov 11, 2009 at 13:32:06 (UTC)
Goto Top
in dem du die Datei einfach mit Excel öffnest und beim Import angibst, das die Spalten durch Tabs getrennt sind
Member: SamTrex
SamTrex Nov 11, 2009 at 20:29:55 (UTC)
Goto Top
Danke Iwan,
wieder was gelernd. ... Dachte das auch so separierte Dateien unter csv läuft.

Gruß Sam
Member: bastla
bastla Nov 11, 2009 at 20:34:53 (UTC)
Goto Top
Hallo Holger292 und willkommen im Forum!

Das Zusammenfügen der einzelnen .tsv-Dateien lässt sich einfach per Kommandozeile machen:
copy *.tsv Gesamt.txt
Danach dann, wie von Iwan beschrieben, in Excel die "Gesamt.txt" öffnen ...

Grüße
bastla
Member: Holger292
Holger292 Nov 12, 2009 at 07:56:10 (UTC)
Goto Top
Vielen Dank an Alle, es funktioniert wunderbar!
Member: Holger292
Holger292 Nov 12, 2009 at 09:06:13 (UTC)
Goto Top
Hi,


leider doch nicht ganz son wunderbar, denn es fehlen jede Menge Programme in meiner erstellten Liste. Das Script von MS scheint da nicht das Geeignete zu sein.

Wenn ich das richtig sehe, liest das Script auch nicht den Uninstall Key aus, den ja auch die Liste unter Systemsteuerung -> Software benutzt.

Wie kann ich das Script jetzt noch dazu bringen, diesen Key auszulesen?
Und wie nehme ich den Lösungshaken bei diesem Thread wieder raus?
Wie kann ich den Namen des Betriebssystems auslesen?


Ich habe diesen Code gefunden, mit dem ich allerdings etwas überfordert bin:

http://gallery.technet.microsoft.com/ScriptCenter/en-us/b994f262-be39-4 ...