Write CSV
Dies ist das Gegenstück zu "Read_Excel"
Kommentar: Dieses kleine Skript liest den dfs-share aus und erstellt eine csv-Datei
für den Audit, bzw. Überblick über im Einsatz befindliche Software.
Gesammelte Daten : Pfad zur Deinstallations-CMD(inkl.Namen);Pfad zur Installations-CMD;Verzeichnis der Installations-CMD;MSI-Name;Produktname(MSI);ProduktCode(MSI);Version(MSI);Produkthersteller(MSI)
option expliciton error resume nextDim wshell,fso,spath,deinst,file,src,srctmp,srcline,firstposDim skip,str,lastpos,instpath,msicmd,i,msistrDim WI,DB, proplst,result, view,rec,pname,pcode,prodver,manufDim strFileSet wshell = WScript.CreateObject("Wscript.shell")Set FSO = WScript.CreateObject("Scripting.FileSystemObject")set spath = fso.getfolder("\\fhhnet\dfs-install$\Automatisch\_Deinstallationen")set deinst = fso.opentextfile("D:\dfs_share.csv",2,True)deinst.writeline "Pfad zur Deinstallations-CMD(inkl.Namen);Pfad zur Installations-CMD;Verzeichnis der Installations-CMD;MSI-Name;Produktname(MSI);ProduktCode(MSI);Version(MSI);Produkthersteller(MSI)"for each file in spath.files 'File beinhaltet den Pfad zur Deinstallation' set src=fso.OpenTextFile(file,1) set srctmp=fso.OpenTextFile(file,1) 'Temporär angelegt wegen der src.skip-Funktion' 'Gesamte Zeile einlesen' srcline = srctmp.readline 'Und Position innerhalb der Zeile bestimmen' firstpos = instr(1,srcline,""" """,1) 'Denn jetzt bestimmen wir den Pfad und die Installationsbatch' skip=src.skip(firstpos+2) str=src.readline str=Replace(str, """ /Uninstall %~1" ,"") str=Replace(str, """ /uninstall %~1" ,"") str=Replace(str, """ /unInstall %~1" ,"") str=Replace(str, """ /UnInstall %~1" ,"") str=Replace(str, """ /uninstall" ,"") 'Ermitteln des Installationspfades /wichtig für das Auslesen des MSIs' lastpos=instrrev(str,"\",-1,1) instpath=left(str,lastpos) 'Ab hier wird der MSI-Name ausgelesen' 'In der Variablen "str" ist jetzt der Pfad zur Installationsbatch hinterlegt.' 'Das nutzen wir, um jetzt den String, der den MSI-Namen enthält, auszulesen' msistr = msisupp(str) writesms deinst.writeline file & ";" & str & ";" & instpath & ";" & msistr & ";" & pname & ";" & pcode & ";""" & prodver & """;" & manuf 'Zurücksetzen der gebrauchten Variablen str = nothing msicmd = nothing msistr = nothingnext'Liest MSI-Dateinamen aus CMDfunction msisupp(strFile) 'Ist CMD-file vorhanden? if fso.FileExists(strFile) then 'Wenn ja set msicmd=fso.opentextfile(strFile,1) i=0 redim preserve zeile(i) do while not (msicmd.AtEndOfStream) 'für jede Zeile in der CMD tue... zeile(i)=msicmd.readline 'ist in der Zeile "MSI-DATEI" vorhanden? if instr (zeile(i),"MSI-DATEI") then 'wenn ja - hole alles hinter dem "=" lastpos=instr(zeile(i),"=") msistr=mid(zeile(i),lastpos+1) 'dann Schleife verlassen exit do else 'CMD enthält kein "MSI-DATEI" msistr="MSISTRING_NOT_FOUND" end if loop else 'CMD nicht vorhanden msistr="CMDFILE_NOT_FOUND" end if 'Rückgabe msisupp = msistrend functionsub writesmsif fso.FileExists(instpath & "Install" & "\" & msistr) then Set WI = CreateObject("WindowsInstaller.Installer") Set DB = WI.OpenDatabase(instpath & "Install" & "\" & msistr,0) 'Füllen des Property-Arrays und deklarieren des Übergabe-Arrays' 'Für jedes hinzugefügte Attribut in proplst wird der Zähler in result um Eins erhöht' proplst = Array("ProductName","ProductCode","ProductVersion","Manufacturer") result = Array() i=0 for i=0 to ubound(proplst) 'SQL-Statements definieren Set View = DB.OpenView("Select `Value` From Property WHERE `Property` = '" & proplst(i) & "'") 'SQL-Statements ausführen View.Execute Set Rec = View.Fetch redim preserve result(i) result(i) = rec.StringData(1) 'Für die Variablenübergabe an das CMD' select case i case 0 pname = result(i) case 1 pcode = result(i) case 2 prodver = result(i) case 3 manuf = result(i) end select next else pname = "MSIFILE_NOT_FOUND" pcode = "MSIFILE_NOT_FOUND" prodver = "MSIFILE_NOT_FOUND" manuf = "MSIFILE_NOT_FOUND" end ifend sub