Because process rclone output can't be processed with % {} when script that call clone module when executed by scheduled task. |
||
---|---|---|
bin | ||
etc | ||
lib | ||
log | ||
backup.ps1 | ||
README.md |
Powershell Backup Script
This is a simple backup script write in Powershell for Microsoft Windows. It
needs 7za
and rclone
executable into the ./bin
directory to work properly.
You must configure it with JSON files, one example is provided in
./etc/example.json
.
usage
powershell -File backup.ps1 [-conf ./etc/example.json] [-log ./log/example.log] [-debug]
-conf
: configuration file (JSON), default./etc/backup.json
log
: log file, default$false
-debug
: verbose output on stdout (not log file)
Configuration example
Here is the example.json
file :
{
"actions" :
[
{
"name" : "document_backup",
"source" : "C:\\Users\\people\\document",
"source_eval" : false,
"dest" : "\\\\backup_srv\\srv01\\",
"type" : "compress",
"options" : {
"-mx" : 3,
"-mmt" : 4,
"-xr@" : "C:\\backup\\etc\\7z\\exclude.txt"
},
"hook_postexec" : "<command>",
"username" : "bkp_example",
"pass" : "<secure_string>"
},
{
"name" : "project_copy",
"source" : "C:\\Users\\people\\project",
"dest" : "X:\\",
"type" : "clone",
"options" : {
"--exclude" : "*.zip"
}
},
{
"name" : "database_backup",
"source" : false,
"dest" : "X:\\databases",
"type" : "dump_mssql",
"options" : {
"server": "srv_host",
"instance" : "SQL2016",
"databases": "mydatabase",
"compression" : false
}
}
]
}
All actions performed by the script are defined by actions [...]
object :
name
: name of the action, it will be use as filename for the.zip
output incompress
type (see below)source
: the source path, can be{{tmpdir}}
to give the temporary folder or a powershell expression ifsource_eval
is set totrue
source_eval
: evaluate the powershell expression in source, for example$env:HOMEDATA\Music
will be interpreted asC:\Users\name\Music
dest
: the destination path, can be a network path (like\\<host>\<path>
) can be{{tmpdir}}
to give the script temporary folder.type
define the action, action is represented by a powershell module file inlib/
directoryoptions
: options for the modulehook_postexec
: Powershell command to execute when current action is terminatedusername
: user name for destination network share (if needed)pass
: password for destination network share (if needed)
Modules
This script works with Powershell modules located in lib/
directory. Here is
the list of defaults module
clone
: Clone a directory
This module Clone a directory from source
to dest
. It use
rclone so you can add rclone command line parameters in options
.
compress
: Compress files / directory
This module create a compressed file in dest
with source
. It use
7zip so you can add 7za
command line parameters in options
.
dump_mssql
: Dump MSSQL database(s)
This module backup Microsoft SQL Server databases, for this one, source
must
be false
. Here are json options :
server
: MSSQL Server, required parameter (localhost doesn't work 😢)instance
: Server instance, required parametercompression
: activate compression output (zip format - defaultfalse
)databases
: list of databases to be backuped (default all)
You must execute backup script with an user that have the right of backupping MSSQL databases. For now, authentication for databases export is not supported. The user that run the MSSQL daemon must have right to access destination path.
temporary folder
You can use {{tempdir}}
in source
or destination
to specify a temporary
directory (formely <script_folder>\tmp
). This can be useful, for example, when
you want to dump database but use 7zip to compress them :
- first action dump databases to
{{tempdir}}
- second action compress files in
{{tempdir}}
to final destination
Password for network share
In this script, network share need a password. password
must be created on
the machine and tha user account which execute the script with following
command
"PassW0rd" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString
Copy-paste the result in your json file into pass
(in example, replace
<secure_string>
).
Log
This backup script log information to your terminal, but it can also log to a
file, useful when you execute it in scheduled task for example. Log are in the
log/
directory. Script create a logfile per day named with the configuration
file basename plus date of execution (eg example.20210112.log
)
If a logfile is older that 15 day, it will be move to a compressed file
(example.log.archives.<year>.<month>.7z
)
disclaimer
Until I'm a Linux/*BSD system administrator, I'm not too familiar with Windows system, in particular with MSSQL command line backup tool. So I could do some misktakes, if i do then you can contact me on the fediverse at @ephase@toot.aquilenet.fr (and if you have some questions, bug reports, suggestions too).
Licence
This script is released under le MIT licence
Copyright © 2021 Yorick Barbanneau
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.