'Copyright SMSUtils (2005) 'Send Feedback/Suggestions to matt.broadstock@gmail.com Option Explicit 'On Error Resume Next Dim objWMIService, SWBemlocator, UserName, Password Dim strSMSServer, strSMSSite, strOutputFile Dim objFSO, objOutputFile, objErrorFile Dim strPackageQuery, strProgramQuery Dim colPrograms, objProgram, colPackages, objPackage Dim strProgramName, strPackageID, strPackageCommandLine Dim strPackageName, strPackageSourceDir Dim strAllOutput, strErrorOutput Dim blnProgramError Dim strQuote Const ForReading = 1, ForWriting = 2, ForAppending = 8 strQuote = Chr(34) strOutputFile = "SMS Package_Bad SourcePath.txt" strOutputErrorsFile = "SMS Package_Bad SourcePath-Errors.txt" strSMSServer = "stl-ic-sms1" strSMSSite = "009" UserName = "" Password = "" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objOutputFile = objFSO.CreateTextFile(strOutputFile, ForWriting) Set objErrorFile = objFSO.CreateTextFile(strOutputErrorsFile, ForWriting) Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = SWBemlocator.ConnectServer(strSMSServer,"\root\sms\site_" & strSMSSite,UserName,Password) strProgramQuery = "Select * from SMS_Program" Set colPrograms = objWMIService.ExecQuery(strProgramQuery,,48) For Each objProgram in colPrograms 'Reset program variables since we are looping strProgramName = "" strPackageID = "" strPackageCommandLine = "" strAllOutput = "" strErrorOutput = "" blnProgramError = False strProgramName = objProgram.ProgramName strPackageID = objProgram.PackageID strPackageCommandLine = objProgram.CommandLine strAllOutput = "Program: " & strProgramName & vbTab & "PackageID: " & strPackageID & vbTab & strPackageCommandLine & VbCrLf 'Get Package properties so we can find the source folder strPackageQuery = "Select PkgSourcePath, Name from SMS_Package where PackageID='" & strPackageID & "'" & " AND PkgSourceFlag<>'1'" Set colPackages = objWMIService.ExecQuery(strPackageQuery,,48) For Each objPackage In colPackages 'Reset package variables since we are looping strPackageName = "" strPackageSourceDir = "" strPackageName = objPackage.Name strPackageSourceDir = objPackage.PkgSourcePath strAllOutput = strAllOutput & vbTab & "Package: " & strPackageName & vbTab & strPackageSourceDir & VbCrLf If objFSO.FolderExists(strPackageSourceDir) Then 'WScript.Echo vbTab & "OK - Source folder exists" 'WScript.Echo objProgram.Name & vbTab & objProgram.PkgSourcePath Dim strMSIName, strFullMSIPath, strMSTName, strFullMSTPath 'Look for MSI in command line and make sure it exists if specified strMSIName = FindInString(strPackageCommandLine, ".MSI", " ") 'WScript.Echo vbTab & "MSIName: " & strMSIName If strMSIName <> "0" Then 'WScript.Echo vbTab & vbTab & "MSI is in the command line" strFullMSIPath = strPackageSourceDir & "\" & strMSIName strAllOutput = strAllOutput & vbTab & vbTab & strFullMSIPath & VbCrLf If objFSO.FileExists(strFullMSIPath) Then strAllOutput = strAllOutput & vbTab & vbTab & "MSI exists in sourcefolder" & VbCrLf 'Look for MST in command line and make sure it exists if it is specified strMSTName = FindInString(strPackageCommandLine, ".MST", "=") 'WScript.Echo vbTab & "MSTName: " & strMSTName If strMSTName <> "0" Then 'WScript.Echo vbTab & vbTab & "MST is in the command line" strFullMSTPath = strPackageSourceDir & "\" & strMSTName strAllOutput = strAllOutput & vbTab & vbTab & strFullMSTPath & VbCrLf If objFSO.FileExists(strFullMSTPath) Then strAllOutput = strAllOutput & vbTab & vbTab & "MST exists in sourcefolder" Else blnProgramError = True strAllOutput = strAllOutput & vbTab & vbTab & "ERROR: MST missing from sourcefolder" & VbCrLf End If Else 'WScript.Echo vbTab & vbTab & "No MST in command line" End If Else blnProgramError = True strAllOutput = strAllOutput & vbTab & vbTab & "ERROR: MSI missing from sourcefolder" & VbCrLf End If Else 'Command line has MSI in it 'WScript.Echo vbTab & vbTab & "No MSI in command line" 'get return code and use it to display useful info Dim intFileExists intFileExists = CheckIfFileExists(".MSP") If intFileExists = 0 Then 'WScript.Echo "MSPsuccess" Else 'WScript.echo"MSPfailure: " & intFileExists intFileExists = CheckIfFileExists(".VBS") If intFileExists = 0 Then 'WScript.Echo "VBSsuccess" Else 'WScript.echo"VBSfailure: " & intFileExists intFileExists = CheckIfFileExists(".BAT") If intFileExists = 0 Then 'WScript.Echo "BATsuccess" Else 'WScript.echo"BATfailure: " & intFileExists intFileExists = CheckIfFileExists(".EXE") If intFileExists = 0 Then 'WScript.Echo "EXEsuccess" Else 'WScript.echo"EXEfailure: " & intFileExists End If End If End If End If End If 'Command line has MSI in it Else 'WScript.Echo "NO SOURCE" strAllOutput = strAllOutput & vbTab & "ERROR: NO SOURCE FOLDER: " & strPackageName & vbTab & strPackageSourceDir & VbCrLf End If Next 'For the package the program is associated with 'WScript.Echo strAllOutput objOutputFile.WriteLine(strAllOutput) If blnProgramError = True Then objErrorFile.WriteLine(strAllOutput) End If Next 'For each program WScript.Echo "SMS Package_Bad SourcePath2 script complete." WScript.Quit '********************************************************************* '********************************************************************* Function CheckIfFileExists(strFileExtension) Dim strFileName, strFullFilePath strFileName = FindInString(strPackageCommandLine, strFileExtension, " ") 'Look for extension in command line and make sure it exists if it is specified If strFileName <> "0" Then 'File extension found in command line strAllOutput = strAllOutput & vbTab & vbTab & "FileName: " & strFileName & VbCrLf strFullFilePath = strPackageSourceDir & "\" & strFileName strAllOutput = strAllOutput & vbTab & vbTab & strFullFilePath & VbCrLf 'Check for the existence of the file in the source path folder If objFSO.FileExists(strFullFilePath) Then 'File found in source path (success) strAllOutput = strAllOutput & vbTab & vbTab & strFileExtension & " exists in sourcefolder" & VbCrLf CheckIfFileExists = 0 Else 'File not found in source path (failure) strAllOutput = strAllOutput & vbTab & vbTab & "ERROR: missing from sourcefolder" & VbCrLf CheckIfFileExists = 1 blnProgramError = True End If Else 'File extension not found in Program command line CheckIfFileExists = 2 End If End Function Function FindInString(strToBeSearched, strToFind, strDelimeter) Dim intCheckLoc, intStartLoc, intLength Dim strName intCheckLoc = InStr(UCase(strToBeSearched), UCase(strToFind)) If intCheckLoc <> 0 Then 'WScript.Echo vbTab & "Found String" intStartLoc = InStrRev(strToBeSearched, strDelimeter, intCheckLoc) 'WScript.Echo vbTab & vbTab & "Startloc: " & intStartLoc & vbTab & "Endloc: " & intCheckLoc intLength = intCheckLoc - intStartLoc strName = Mid(strToBeSearched, intStartLoc + 1, intLength + 3) Dim strTest strTest = Mid(strToBeSearched, intStartLoc + intLength + 4, 1) If strTest = strQuote Then intStartLoc = InStrRev(strToBeSearched, strQuote, intCheckLoc) 'WScript.Echo vbTab & vbTab & "Startloc: " & intStartLoc & vbTab & "Endloc: " & intCheckLoc intLength = intCheckLoc - intStartLoc strName = Mid(strToBeSearched, intStartLoc + 1, intLength + 3) End If 'strFullMSIPath = strPackageSourceDir & "\" & strName 'WScript.Echo vbTab & vbTab & strFullMSIPath strName = Replace(strName, strQuote, "") FindInString = strName Else FindInString = "0" End If End Function