jaku2007
Goto Top

VB Script mit Scriptomat von MS erstellt

Hallo,

ich mit dem Tool Scriptomatic von MS ein VBS Script erstellt welches mir Informationen von Servern auslesen, sowie nachschauen ob im Eventlog Fehlercodes sind. Da ich diese INformationen mehrmals im Monat ziehen will. Momentan wird es als HTML Output angezeigt.
Langfristig möchte ich es als XML Fiel ablegen und die INformationen weiter verarbeiten
Wenn ich das Script über run starte macht es die Aufgaben einwandfrei. Ich habe es dann als VBS gespeichert. Rufe ich es dann über einen Doppelklick auf, bekomme ich nur einzelne Fenster mit den Informationen und dem OK Button angezeigt.
Wie kann ich es aufrufen um den gewünschten Effekt zu erzielen. Am liebsten wäre es mir es als ein exe File abzu speichern.
Habe zum erstenmal ein solches Script erstellt.

Wäre toll wenn einer eine Lösung dafür hätte.

Anbei das Script

 
On Error Resume Next

'Auslesen der HW Informationen und Schreiben einer HTML Datei  
'----------------------------  

strComputer = "."  

Public Regpfad
Dim Client
Dim Clientname
Dim WindowsVersion
Dim WSHEnvOS
Dim WSHEnvPrg
Dim fs
Dim fso

Set WSHShell = WScript.CreateObject("WScript.Shell")  
Set WSHEnvOS = WSHShell.Environment("Process")  
Set WSHEnvPrg   = WSHShell.Environment("Process")  
set fs = CreateObject ("Scripting.FileSystemObject")  
Set WSHEnvPrg   = WSHShell.Environment("Process")  
set fs = CreateObject ("Scripting.FileSystemObject")  

OS = WshEnvPrg("OS")  
if OS="Windows_NT" then  

Client = WshEnvOS("COMPUTERNAME")   
Set fso = CreateObject("Scripting.FileSystemObject")  
set WshShell = CreateObject("WScript.Shell")  

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProductName"  
WindowsVersion = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CSDVersion"  
ServicePack = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SystemRoot"  
Systemroot = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version"  
IeVs = Wshshell.RegRead(RegPfad)
'Wscript.Echo IeVs  

Windowsversion=Windowsversion & ", " & ServicePack  
end if

if not OS="Windows_NT" then  
Set fso = CreateObject("Scripting.FileSystemObject")  
set WshShell = CreateObject("WScript.Shell")  

RegPfad = "HKEY_LOCAL_MACHINE\Network\Logon\Username"  
Client = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Version"  
WindowsVersion = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SystemRoot"  
Systemroot = WshShell.RegRead(RegPfad)

RegPfad = "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version"  
IeVs = Wshshell.RegRead(RegPfad)
end if

Function GetOfficeVer()

  sRegPre = "HKLM\SOFTWARE\Microsoft\Office\"  
  sRegPost = "\Common\InstallRoot\"  
  Select Case True
    Case RegKeyExists(sRegPre & "11.0" & sRegPost)  
      sOfficeVer = "2003"  
    Case RegKeyExists(sRegPre & "10.0" & sRegPost)  
      sOfficeVer = "2002"  
    Case RegKeyExists(sRegPre & "9.0" & sRegPost)  
      sOfficeVer = "2000"  
    Case RegKeyExists(sRegPre & "8.0" & sRegPost)  
      sOfficeVer = "97"  
    Case Else
      sOfficeVer = "Keine"  
  End Select
  GetOfficeVer = sOfficeVer
End Function

Function RegKeyExists(ByVal sRegKey)
  ' Returns True or False based on the existence of a registry key.  

  Dim sDescription, oShell
  Set oShell = CreateObject("WScript.Shell")  

  RegKeyExists = True
  sRegKey = Trim (sRegKey)
  If Not Right(sRegKey, 1) = "\" Then  
    sRegKey = sRegKey & "\"  
  End If

  On Error Resume Next
  oShell.RegRead "HKEYNotAKey\"  
  sDescription = Replace(Err.Description, "HKEYNotAKey\", "")  

  Err.Clear
  oShell.RegRead sRegKey
  RegKeyExists = sDescription <> Replace(Err.Description, sRegKey, "")  
  On Error Goto 0
End Function

clientname = "C:\log\" & client & ".txt"  

'Pfad wird erstellt, wenn nicht vorhanden  
'----------------------------------------	  

WshShell.Run "%comspec% /c if not exist C:\log\. md C:\log",0,true  
'Windows 2000/XP/NT  


'die Inventarisierungsdatei der Rechner wird bei jedem Neustart gelöscht  
'-----------------------------------------------------------------------  

if fs.FileExists(clientname) then 
fs.DeleteFile(clientname)
end if
set fs=nothing

set fs = CreateObject ("Scripting.FileSystemObject")  
set clientlog = fs.OpenTextFile (clientname,8,true)


'Auslesen der Windows-Hardwareinformationen  
'------------------------------------------  

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystemProduct",,48)  
For Each objItem in colItems
modell=objItem.Vendor & " " & objItem.Name  
serial="Seriennummer: " & objItem.IdentifyingNumber  
Next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)  
For Each objItem in colItems
if objItem.Caption = "C:" then festplatteC= objItem.Caption & " " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " / " & Round(objItem.Size /1024 /1024 /1024,2) & " GByte"  
if objItem.Caption = "D:" then festplatteD= objItem.Caption & " " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " / " & Round(objItem.Size /1024 /1024 /1024,2) & " GByte"  
if objItem.Caption = "E:" then festplatteE= objItem.Caption & " " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " / " & Round(objItem.Size /1024 /1024 /1024,2) & " GByte"  
if objItem.Caption = "F:" then festplatteF= objItem.Caption & " " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " / " & Round(objItem.Size /1024 /1024 /1024,2) & " GByte"  
Next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)  
For Each objItem in colItems
system= objItem.Name & ": " & objItem.CurrentClockSpeed & " Mhz"  
Next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalMemoryConfiguration",,48)  
For Each objItem in colItems
speicher= "Gesamtspeicher (MB): " & objItem.TotalPhysicalMemory /1000  
Next

'Schreiben in die clientdatei  
'----------------------------  
WScript.Echo "IT-System Check fuer"  
WScript.Echo "=========================================="  
 WScript.Echo "Computer: " & Client  
 WScript.Echo "=========================================="  
WScript.Echo  "Datum: "  & now  
WScript.Echo  " "  
WScript.Echo  " "  
WScript.Echo  modell  
WScript.Echo  serial
WScript.Echo  system 
WScript.Echo  speicher 
WScript.Echo  " "  
WScript.Echo  " "  
WScript.Echo  "Festplatte verfuegbar/insgesamt " & FestplatteC  
WScript.Echo  "Festplatte verfuegbar/insgesamt " & FestplatteD  
WScript.Echo  "Festplatte verfuegbar/insgesamt " & FestplatteE  
WScript.Echo  "Festplatte verfuegbar/insgesamt " & FestplatteF  
WScript.Echo  " "  
WScript.Echo  " "  
WScript.Echo  "Betriebssystem: " & Windowsversion  
WScript.Echo  "WindowsVerzeichnis: " & Systemroot  
WScript.Echo  "Internet Explorer Vs: " & IeVs  
WScript.Echo  "Office Vs: " & GetOfficeVer()  
WScript.Echo  " "  
WScript.Echo  " "  
'Auslesen des EventLogs und Sichern dieser  
'----------------------------  


Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

arrComputers = Array("Technik09")  
For Each strComputer In arrComputers
   WScript.Echo
   WScript.Echo "=========================================="  
   
   WScript.Echo "=========================================="  

   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent where EventType=1")  
'  Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent", "WQL", _  
'                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)  

   For Each objItem In colItems
      WScript.Echo "Category: " & objItem.Category  
      WScript.Echo "CategoryString: " & objItem.CategoryString  
      WScript.Echo "ComputerName: " & objItem.ComputerName  
      strData = Join(objItem.Data, ",")  
         WScript.Echo "Data: " & strData  
      WScript.Echo "EventCode: " & objItem.EventCode  
      WScript.Echo "EventIdentifier: " & objItem.EventIdentifier  
      WScript.Echo "EventType: " & objItem.EventType  
      strInsertionStrings = Join(objItem.InsertionStrings, ",")  
         WScript.Echo "InsertionStrings: " & strInsertionStrings  
      WScript.Echo "Logfile: " & objItem.Logfile  
      WScript.Echo "Message: " & objItem.Message  
      WScript.Echo "RecordNumber: " & objItem.RecordNumber  
      WScript.Echo "SourceName: " & objItem.SourceName  
      WScript.Echo "TimeGenerated: " & WMIDateStringToDate(objItem.TimeGenerated)  
      WScript.Echo "TimeWritten: " & WMIDateStringToDate(objItem.TimeWritten)  
      WScript.Echo "Type: " & objItem.Type  
      WScript.Echo "User: " & objItem.User  
      WScript.Echo
   Next
Next

Function WMIDateStringToDate(dtmDate)
WScript.Echo dtm: 
	WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _  
	Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _  
	& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))  
End Function
dtmThisDay = Day(Date)
dtmThisMonth = Month(Date)
dtmThisYear = Year(Date)
strBackupName = dtmThisYear & "_" & dtmThisMonth _  
    & "_" & dtmThisDay  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate,(Backup)}!\\" & _  
        strComputer & "\root\cimv2")  
Set colLogFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _  
        & "Where LogFileName='Application'")  
For Each objLogfile in colLogFiles
    objLogFile.BackupEventLog("c:\log\" _  
        & strBackupName & _
        "_application.evt")  
    objLogFile.ClearEventLog()
    WScript.Echo "File saved in c:\log: " & strBackupName & _  
        "_application.evt"  
Next
Set colLogFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _  
        & "Where LogFileName='System'")  
For Each objLogfile in colLogFiles
    objLogFile.BackupEventLog("c:\log\" _  
        & strBackupName & _
        "_system.evt")  
    objLogFile.ClearEventLog()
    WScript.Echo "File saved in c:\log: " & strBackupName & _  
        "_system.evt"  
Next

[Edit Biber] Schnipsel auf umformtiert. Einiges wurde sonst falsch angezeigt. [/Edit]

Content-Key: 52220

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

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

Member: AndreasHoster
AndreasHoster Feb 21, 2007 at 11:17:12 (UTC)
Goto Top
Es ist ein Skript, also keine EXE.
Aber was spricht gegen cscript.exe namedesskripts.vbs ?
Und wscript.echo gibt immer im Fenster/Messagebox aus.

Die Output-Funktionen XML, HTML, Excel etc. der Scriptomatic 2 sind in der Scriptomatic integriert, nicht im generierten VBS Code.
Da hilft nur selber die Ausgabe entsprechend umzuprogrammieren.
Member: JAKU2007
JAKU2007 Feb 22, 2007 at 14:40:13 (UTC)
Goto Top
Vielen Dank für den Hinweis, hat mir weitergeholfen. Geht jetzt soweit.
Ich hab noch eine Frage und würde wissen, ob du mir dabei helfen kannst.
Ich müßte aus einem RegistryZweig verschiedene Werte auslesen und würde diese gerne auch in die Datei schreiben.
Auszug aus der Reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion\Misc.]
"ProgramVer"="7.0"
"InternalPatternVer"=dword:00068a9c
"PatternVer"=dword:0000011f
"PatternDate"="20070221"

Wobei die Dword Werte wenn möglich noch umgerechnet werden sollten.
Hats du eine Idee.

Gruss Jaku2007
Member: AndreasHoster
AndreasHoster Feb 22, 2007 at 14:58:57 (UTC)
Goto Top
Ich habe immer Ideen face-wink Manchmal bessere, manchmal ...

VBS kann Daten aus der Registry auslesen:
Set wshshell = CreateObject("Wscript.Shell")
wert = wshshell.RegRead("HKLM\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion\Misc.\ProgramVer")

RegRead gibt String oder Zahl zurück, je nach Wert in der Registry (was bei Binary zurückkommt, keine Ahnung)
Also einfach mit auslesen.
Member: JAKU2007
JAKU2007 Feb 22, 2007 at 15:30:28 (UTC)
Goto Top
Hi, vielen Dank. Klappt super. Werte werden sogar korrekt übergeben. Muss jetzt nur noch schauen das ich keine TXT datei erzeuge sondern eine XML für die weiterverarbeitung.