Bonjour,
Je suis novice en langage de programmation et m'y intéresse fortement depuis peu, surtout pour déployer manuellement des postes Windows configurés. J'ai comme projet de réaliser la mise en place d'une sauvegarde automatique sécurisée. Il s'agit de synchroniser tous les jours un répertoire clients Windows sur un serveur Linux distant tout en confirmant par l'envoi de mail, le bon ou mauvais déroulement de la tâche à exécuter.
J'ai comme défis:
- de ne pas utiliser le moindre outil de backup disponible sur le net afin d'exploiter WSL2 (le sous-système Linux for Windows), Powershell et le planificateur de tâches Windows.
- de simplifier un maximum la mise en place de cette solution de sauvegarde, de sorte à ce qu'un Linuxien allergique à Windows puisse l'appliquer
A ce jour, j'ai 3 scripts Powershell (si on peut appeler ça des scripts) que j'ai réalisé tant bien que mal mais qui fonctionne très bien. Il y a certainement moyen de tout compiler mais sans formation, je n'ai sans doute pas choisi la plus logique des façons de faire.
- le 1er est une commande WSL + RSYNC qui lance la synchronisation d'un répertoire sur un serveur distant Linux par ssh et qui génère un fichier log.
wsl rsync -avzhP -e 'ssh -p [port]' --delete-after --stats --log-file=/mnt/c/Users/username/Logs/sauvegarde.log --log-file-format="% t \ n" /mnt/c/sauvegarde remoteuser@serveur:
- le 2ème envoi un mail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| # Adresse du serveur SMTP
$SMTPServer = "smtp.quelquechose.com"
# Expediteur
$EmailFrom = "user@mail.com"
# Destinataire
$EmailTo = "user@mail.com"
# Nom de la machine qui exécute ce script ## A NE PAS MODIFIER!!!
$env:COMPUTERNAME
# Sujet du mail
$Subject = "Sauvegarde de votre ordinateur $($env:COMPUTERNAME)"
# Chemin où se situe le fichier de log généré pendant la sauvegarde du script 1
$PJ = 'C:\Users\username\Logs\sauvegarde.log'
# Permet l'envoi de mail avec les accents
$enc = New-Object System.Text.utf8encoding
# Corps du message en HTML
$CORPS_MAIL =
"
L'exécution de votre sauvegarde s'est déroulée sans problème.
<BR>
<BR>
<BR>
====================================================================================================<BR>
<font size=3><u><B>Ceci est un message automatique. Merci de ne pas y répondre.</B></ol></u></font>
"
# Login d'authentification
$User = "login ou adresse mail"
# Mot de passe associé qui sera sécurisé
$PWord = ConvertTo-SecureString String "Password" AsPlainText -Force
$Credential = New-Object TypeName "System.Management.Automation.PSCredential" ArgumentList $User, $PWord
# Appel de la commande qui envoi le mail pour informer du bon déroulement de la sauvegarde
Send-MailMessage -SmtpServer $SMTPServer -BodyAsHtml $CORPS_MAIL -Encoding $enc -Port 587 -UseSsl -Credential $Credential -From $EmailFrom -To $EmailTo -Subject $Subject -Attachments $PJ |
- le 3ème est identique au 2ème sauf qu'il indique dans le corps du mail que la sauvegarde a échouée
Ma question est:
- Comment peut-on faire en sorte que le script 2 s'exécute si le script 1 se déroule sans problème ou que le script 3 s'exécute si le script 1 ne fonctionne pas? sachant que script1 sera à exécuter automatiquement tous les jours avec le planificateur de tâches.
Je vous remercie d'avance pour votre précieuse aide.
-
Partager