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 explicit
on error resume next

Dim wshell,fso,spath,deinst,file,src,srctmp,srcline,firstpos
Dim skip,str,lastpos,instpath,msicmd,i,msistr
Dim WI,DB, proplst,result, view,rec,pname,pcode,prodver,manuf
Dim strFile

Set 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 = nothing
next

'Liest MSI-Dateinamen aus CMD
function 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 = msistr
end function

sub writesms

if 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 if


end sub

  • Donnerstag, 22 März 2018

Leave a comment

You are commenting as guest.