From 9098bc953884a978cef9b7406877117ef9832413 Mon Sep 17 00:00:00 2001 From: "Michael H.G. Schmidt" Date: Sat, 11 Mar 2023 21:54:39 +0100 Subject: [PATCH] V1.08 --- README.md | 16 +++++----- snapcontrol.exe | Bin 73728 -> 71680 bytes snapcontrol.ini | 21 +++++++------ snapcontrol.pb | 79 +++++++++++++++--------------------------------- 4 files changed, 43 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index 0ec5832..8238c1d 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Get it from here: https://www.inveigle.net/cmail/download ## Installation -- Download the latest release and unzip the files +- Download the latest release and unzip the files (.exe and .ini file) to some path of your choice - Open "snapcontrol.ini" with the editor of your choice and set the following variables: - BinPath - TargetPath @@ -49,21 +49,21 @@ Get it from here: https://www.inveigle.net/cmail/download snapcontrol.exe /I ``` -( Snapcontrol copies the config file and itself to the location of the "InstallTo" variable. ) +Snapcontrol will find "snapcontrol.ini" automagically in the path where snapcontrol.exe was *installed*! -That's all. Snapcontrol will be called by the Windows scheduler. See "snapcontrol.ini" for detailed comments on the features. +That's all. Snapcontrol will now be called by the Windows scheduler. See "snapcontrol.ini" for detailed comments on the features. ## USAGE ```dos C:\>snapcontrol.exe /? -usage: snapcontrol.exe - /I = install program and config - /U = update scheduler job - /D = dry run +usage: snapcontrol.exe [ /I | /V> | /D | /? ] + /I = install/update scheduler job /V = show version + /D = dry run + /? = help ``` -Everytime you change the values in "BackupSched" or "BackupStart" you will have to call snapcontrol.exe with the /U switch. +Everytime you change the values in "BackupSched" or "BackupStart" you will have to call snapcontrol.exe with the /I switch. diff --git a/snapcontrol.exe b/snapcontrol.exe index 6374990625438fc0856d05a6deac3473e76259c4..bfd46557cdf99576244da1820185866d6592e1db 100644 GIT binary patch delta 27669 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 a2W5~Cc;Np3bU=RiU#Ek^uUEB}1pOb_Yo7K1 delta 29422 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 ZvzGh+)4~7S)4`#bQ0tWtd=EMQe*r8A*H-`l diff --git a/snapcontrol.ini b/snapcontrol.ini index 884d3a9..e7e3f00 100644 --- a/snapcontrol.ini +++ b/snapcontrol.ini @@ -1,5 +1,5 @@ ; SNAPCONTROL config file. -; https://github.com/mhgschmidt/snapcontrol +; https://gitea.exabyte.systems/WINDOWS/snapcontrol ; ; This tool creates an image backups of windows machines, ; it uses the Drive Snapshot tool by Tom Ehlert Software. @@ -13,16 +13,10 @@ ; IMPORTANT: DO NOT USE quotation marks in this INIFILE ! ; - -[INSTALL] -; where to install the exe and the infile ... -InstallTo = c:\snapshot - +[BACKUP] ; path where snapshot.exe and cmail.exe is located ... BinPath = c:\tools - -[BACKUP] ; target PATH examples: ; - "D:\BACKUP" (LOCAL path on drive d:) ; - "\\example\share" (SMB share on server "example") @@ -88,8 +82,15 @@ AskForShutdown = yes [LOGGING] -LogFile = backup.log -HistLog = history.log + +; directory for logfiles +LogDir = C: + +; single run logfile +LogFile = snapshot-backup.log + +; cumulated logfile +HistLog = snapshot-history.log [MAIL] diff --git a/snapcontrol.pb b/snapcontrol.pb index 3428e07..7b738ba 100644 --- a/snapcontrol.pb +++ b/snapcontrol.pb @@ -7,7 +7,7 @@ ; LICENSE : MIT License ; AUTHOR : Michael H.G. Schmidt ; EMAIL : michael@schmidt2.de -; DATE : 20211021 +; DATE : 20230311 ; ------------------------------------------------------------ ; ; This tool creates an image backups of windows machines, @@ -29,8 +29,7 @@ EnableGraphicalConsole(0) Dim filelist$(0) -Global VERSION$="V1.07b" -Global installme = 0 +Global VERSION$="V1.08" Global updatesched = 0 Global dryrun = 0 Global hostname$ = GetEnvironmentVariable("COMPUTERNAME") @@ -53,36 +52,34 @@ NewList DriveSnapshotVersion$() DriveSnapshotVersion$() = "V1.48" Procedure Usage() - PrintN ("usage: snapcontrol.exe ") - PrintN (" /I = install program and config") - PrintN (" /U = update scheduler job") - PrintN (" /D = dry run") + PrintN ("usage: snapcontrol.exe [ /I | /V> | /D | /? ]") + PrintN (" /I = install/update scheduler job") PrintN (" /V = show version") + PrintN (" /D = dry run") + PrintN (" /? = help") End 99 EndProcedure ; check commandline... -If ( CountProgramParameters() >1 ) +If ( CountProgramParameters() > 1 ) Usage() EndIf -; set path for inifile ... -inifile$ = RTrim(GetPathPart(ProgramFilename()),"\") + "\snapcontrol.ini" - -; install job, update job, show version, dry run ... +; install or update job, show version, dry run ... If ( UCase(ProgramParameter(0)) = "/I" ) - installme = 1 -ElseIf ( UCase(ProgramParameter(0)) = "/U" ) updatesched = 1 ElseIf ( UCase(ProgramParameter(0)) = "/V" ) PrintN ("Version = " + VERSION$) End 0 ElseIf ( UCase(ProgramParameter(0)) = "/D" ) dryrun = 1 -ElseIf ( UCase(ProgramParameter(0)) = "/?" ) - Usage() +ElseIf ( ProgramParameter(0) = "/?" ) + Usage() EndIf +; set path for inifile ... +inifile$ = RTrim(GetPathPart(ProgramFilename()),"\") + "\snapcontrol.ini" + ; Procedure "RunProgram" aborts after writing approx. 8GB data with snapshot64... ; so we will use native "system" command... ImportC "msvcrt.lib" @@ -94,11 +91,8 @@ If (Not OpenPreferences(inifile$)) End 98 EndIf -PreferenceGroup("install") -Global InstallTo$ = Trim(ReadPreferenceString("InstallTo","c:\snapshot")) -Global BinPath$ = Trim(ReadPreferenceString("BinPath","c:\tools")) - PreferenceGroup("backup") +Global BinPath$ = Trim(ReadPreferenceString("BinPath","c:\tools")) Global TargetPath$ = Trim(ReadPreferenceString("TargetPath","\\server\share")) Global FtpBackup$ = Trim(ReadPreferenceString("FtpBackup","no")) Global FtpServer$ = Trim(LCase(ReadPreferenceString("FtpServer","none"))) @@ -118,12 +112,13 @@ Global EjectMedia$ = Trim(LCase(ReadPreferenceString("EjectMedia","yes"))) Global AskForShutdown$ = Trim(LCase(ReadPreferenceString("AskForShutdown","no"))) PreferenceGroup("logging") -Global LogFile$ = Trim(ReadPreferenceString("LogFile","backup.log")) -Global HistLog$ = Trim(ReadPreferenceString("HistLog","history.log")) +Global LogDir$ = Trim(ReadPreferenceString("LogDir","C:")) +Global LogFile$ = Trim(ReadPreferenceString("LogFile","snapshot-backup.log")) +Global HistLog$ = Trim(ReadPreferenceString("HistoryLog","snapshot-history.log")) ; add PATH to logfiles ... -LogFile$ = InstallTo$ + "\" + LogFile$ -HistLog$ = InstallTo$ + "\" + HistLog$ +LogFile$ = LogDir$ + "\" + LogFile$ +HistLog$ = LogDir$ + "\" + HistLog$ PreferenceGroup("mail") Global MailReport$ = Trim(LCase(ReadPreferenceString("MailReport","no"))) @@ -306,33 +301,7 @@ EndProcedure ; MAIN ; -; installation requested ? -If ( installme = 1 ) - - ; delete old logfiles ... - LogMe("INFO: deleting old logfiles ...") - dummy = system("del /F /Q " + LogFile$ + " 2>nul") - dummy = system("del /F /Q " + HistLog$ + " 2>nul") - - ; create directory ... - LogMe("INFO: creating directory [ " + InstallTo$ + " ] ...") - dummy = system("mkdir " + InstallTo$ + " >nul 2>&1") - - ; copy binary and inifile ... - LogMe("INFO: copy binary and inifile to folder [ " + InstallTo$ + " ] ...") - dummy = system("copy /Y " + inifile$ + " " + InstallTo$ + " 2>nul") - dummy = system("copy /Y " + ProgramFilename() + " " + InstallTo$ + " 2>nul") - - ; update jobscheduler (selfcall) ... - dummy = system(InstallTo$ + "\snapcontrol.exe /U 2>nul") - - ClosePreferences() - CloseConsole() - End - -EndIf - -; update for jobscheduler requested ? +; install or update for jobscheduler requested ? If ( updatesched = 1 ) username$ = GetEnvironmentVariable("USERNAME") @@ -344,7 +313,7 @@ If ( updatesched = 1 ) PrintN("WARNING: unknown BackupschedMode [ " + BackupschedMode$ + " ] ---> IGNORING. Type will be set to LOGIN.") BackupschedMode$ = "LOGIN" EndIf - + ; update the job ... PrintN ("Updating windows jobscheduler ...") If ( BackupschedMode$ = "time" ) @@ -403,6 +372,7 @@ dummy = DeleteFile(LogFile$, #PB_FileSystem_Force) LogMe("============== starting BACKUP ==============") LogMe("snapcontrol.exe version = [ " + VERSION$ + " ]") LogMe(" snapshot.exe version = [ " + DriveSnapshotVersion$() + " ]") +LogMe(" INIFILE = [ " + inifile$ + " ]") If ( dryrun = 1 ) LogMe("DRYRUN - (simulating a backup run) !!!") @@ -438,7 +408,7 @@ If ( Encrypt$ = "dynamic" ) LogMe("WARNING: ENCRYPTED backup requested and DYNAMIC password was requested !") LogMeRaw(" Generated password is: --->>> " + EncryptPW$ + " <<<---") LogMe("INFO: writing password to inifile...") - PreferenceGroup("Global") + PreferenceGroup("backup") dummy = WritePreferenceString("EncryptPW", EncryptPW$) Else LogMe("WARNING: ENCRYPTED backup requested. Using DYNAMIC password in inifile !") @@ -572,8 +542,7 @@ EndProg(e) ; IDE Options = PureBasic 5.73 LTS (Windows - x64) ; ExecutableFormat = Console -; CursorPosition = 555 -; FirstLine = 519 +; CursorPosition = 31 ; Folding = -- ; EnableXP ; Executable = snapcontrol.exe