Nunos Posted January 1, 2023 Share Posted January 1, 2023 I am making a script to backup a SQL DB and I want to write the contents of the results to a file but I think my glasss are fogging up because I am struggling to make it work. expandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=Untitled - 1.ico #AutoIt3Wrapper_Outfile=Dinerware Backup Utility.exe #AutoIt3Wrapper_Outfile_x64=Dinerware Bacukup Utilityx64.exe #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_Fileversion=0.0.0.4 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;#RequireAdmin #include <MsgBoxConstants.au3> #include <Constants.au3> #include <Array.au3> #include <file.au3> #include <date.au3> #include <GUIConstants.au3> Global $Source = '', $Destination = '' $LogFileName = @AppDataDir & "\IDS\Backup.log" If Not FileExists("C:\DWBackup\DWBackupLog.log") Then DirCreate("C:\DWBackup\") ;===> Checks for base level file structure. If Not FileExists(@AppDataDir & "\IDS\") Then DirCreate(@AppDataDir & "\IDS\") ;===> Checks for base level file structure. If Not FileExists(@AppDataDir & "\IDS\DWBackup.ini") Then GUI() ;===> Checks for base level file structure. BackupCreate() ;===> Calls the BackupCreate function to start the backup process. func BackupCreate() ;===> Creates the Files/Backup $Server = IniRead(@AppDataDir & "\IDS\DWBackup.ini", "Server Name", "Name", "default") ;===> Reads the .ini file created above, and sets the associated variables to the information stored. That way it can be piped into the sqlcmd $DBName = IniRead(@AppDataDir & "\IDS\DWBackup.ini", "Database Name", "DbName", "default") ;===> Reads the .ini file created above, and sets the associated variables to the information stored. That way it can be piped into the sqlcmd $Destination = IniRead(@AppDataDir & "\IDS\DWBackup.ini", "Backup Destination", "Path", "default") ;===> Reads the .ini file created above, and sets the associated variables to the information stored. That way it can be piped into the sqlcmd $LogFile = IniRead(@AppDataDir & "\IDS\DWBackup.ini", "Log File Destination", "Path", "default") ;===> Reads the .ini file created above, and sets the associated variables to the information stored. That way it can be piped into the sqlcmd _log('========== Starting Dinerware Backup APP ==========') Run(@ComSpec & ' /c sqlcmd -S ' & $Server & ' -E -Q "BACKUP DATABASE ' & $DBName & ' TO DISK=''' & $Destination & ''' WITH INIT" -o ' & $LogFile,@ScriptDir,@SW_HIDE) ;===> This is the cmd command that is ran through AutoIt. The variales (e.g. $Server) are read from the .ini file and pipes that information into the command where needed. ;===> Just a simple sleep timer for everything to get caught up Sleep(5000) ;===> This is where the information that is wrapped in the "_log" functions comes from FileOpen($LogFile,0) $LogCopy = FileRead($LogFile) FileClose($LogFile) _log('Backup - ' & $LogCopy) ;===> The information denoted above is inserted here _exit() endfunc func _exit() ;===> This function appends the ending part of the wrap for the Logfile _log('********** Ending Dinerware Backup APP **********') ;===> What gets appended to the logfile exit endfunc func _log($str) ;===> This is the function that creates the Backup Log for techs to see when backups were being ran local $hfl = fileopen($LogFileName,1) ;===> Creates the Logfile located in \AppData\Roaming\IDS\Backup.log and assigns the variable if $hfl = -1 Then ;===> If an Error occurs, display this message msgbox(0,'','Log file failed to open.' & @crlf & 'File name = ' & $LogFileName) ;===> Let's user know that the log didn't open Exit ;===> Exits script on error. EndIf filewrite($hfl,_now() & ' ' & $str & @CRLF) ;===> Writes the date, time, and the string that should be the name of the files. fileclose($hfl) ;===> Closes the file endfunc Func GUI() ;===> This function handles the GUI aspect of this script in its current state. Local $msg Local $btnOkay Local $btnClose Local $btnBrowse $GUI = GUICreate("Dinerware Backup", 310, 280) ;===> Will create a dialog box that when displayed is centered GUICtrlCreateLabel("Please input your server name starting with '.\'",15,25) ;===> Label for the input box below to denote what your server name is. $inpBoxSrvName = GUICtrlCreateInput(".\DINERWARE", 15, 45, 150, 20) ;===> Input Box for the server name, will be changed to a Combo Box once arrays are figured out. Currently prepopulates with standard server name. GUICtrlCreateLabel("Please input your database name", 15, 75) ;===> Label for the input box below to denote what your database name is. $inpBoxDbName = GUICtrlCreateInput("dinerware", 15, 95, 150, 20) ;===> Input Box for for the database name, will be changed to a Combo Box once arrays are figured out. Currently prepopulates with standard database name. GUICtrlCreateLabel("Please select a destination for your backup", 15, 125) ;===> Label for backup destination selection $btnBrowseDest = GUICtrlCreateButton("Browse", 235, 125, 65, 25) ;===> Creation of browse button, further logic below $inpBoxDest = GUICtrlCreateInput("", 15, 145, 150, 20) ;===> Creates the input box where the information selected from "Browse" will be piped in. User can also type in the path if known to them. GUICtrlCreateLabel("Please select a destination of the log file", 15, 175) ;===> Label for logfile destination selection $btnBrowseLog = GUICtrlCreateButton("Browse", 235, 175, 65, 25) ;===> Creation of browse button, further logic below $inpBoxLog = GUICtrlCreateInput("", 15, 195, 150, 20) ;===> Creates the input box where the information selected from "Browse" will be piped in. User can also type in the path if known to them. $btnOkay = GUICtrlCreateButton("Okay", 65, 245, 85, 25) ;===> Creation of "Okay" button. This will fire the rest of the script when clicked. $btnClose = GUICtrlCreateButton("Close", 165, 245, 85, 25) ;===> Creation of "Close" Button. This will exit out of the application entirely. GUISetState() ;===> Enables GUI's to be shown While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ;===> When the "X" button is clicked, this exits the application Exit Case $msg = $btnBrowseDest ;===> Logic for when the Backup Destination Browse button is clicked. This will enable the user to select the folder they would like to designate to house their DW backups $Path = FileSelectFolder('Select destination for your backup.', 'C:\', 2, $Source, $GUI) If $Path Then GUICtrlSetData($inpBoxDest, $Path) ;===> This is what pipes the information from the file selection into the input box earlier. $Source = $Path EndIf Case $msg = $btnBrowseLog ;===> Same as above for the other browse button, but this is for the Logfile selection $Path = FileSelectFolder('Select destination for your log file.', 'C:\', 2, $Source, $GUI) If $Path Then GUICtrlSetData($inpBoxLog, $Path) ;===> Again as above, this is what will pipe the relevant information into the input box. $Source = $Path EndIf Case $msg = $btnOkay ;===> This is where we get into the creation of the .ini file. This file will store all the pertinant information that will later be needed by the sqlcmd. This can also be used to store information for scheduling tasks in task scheduler. IniWrite(@AppDataDir & "\IDS\DWBackup.ini", "Server Name", "Name", GUICtrlRead($inpBoxSrvName)) IniWrite(@AppDataDir & "\IDS\DWBackup.ini", "Database Name", "DbName", GUICtrlRead($inpBoxDbName)) IniWrite(@AppDataDir & "\IDS\DWBackup.ini", "Backup Destination", "Path", GUICtrlRead($inpBoxDest) & "\DWBackup.bak") ;===> This is just appending "\DWBackup.bak" to the file selection selected above. If this wasn't here, it would look like this, "C:\DWBackup\". This is why we need the last bit, to direct the sqlcmd to output to the proper files IniWrite(@AppDataDir & "\IDS\DWBackup.ini", "Log File Destination", "Path", GUICtrlRead($inpBoxLog) & "\DWBackupLog.log") ;===> Same as previous line ExitLoop ;===> This is an ExitLoop, in order to carry on with the next function (e.g. BackupCreate() ). Case $msg = $btnClose ;===> Kills script Exit EndSelect WEnd EndFunc The section I am struggling with is... ;===> This is where the information that is wrapped in the "_log" functions comes from FileOpen($LogFile,0) $LogCopy = FileRead($LogFile) FileClose($LogFile) _log('Backup - ' & $LogCopy) Link to comment Share on other sites More sharing options...
Solution Subz Posted January 1, 2023 Solution Share Posted January 1, 2023 (edited) Maybe $hFileOpen = FileOpen($LogFile,0) $LogCopy = FileRead($hFileOpen) FileClose($hFileOpen) You should also be able to just use the following without FileOpen/FileClose $LogCopy = FileRead($LogFile) Edited January 1, 2023 by Subz Link to comment Share on other sites More sharing options...
Earthshine Posted January 1, 2023 Share Posted January 1, 2023 There are many good logging udf to use as well Danp2 1 My resources are limited. You must ask the right questions Link to comment Share on other sites More sharing options...
Nunos Posted January 1, 2023 Author Share Posted January 1, 2023 Thank you I might be getting old cause I sure couldn't see why that kept failing. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now