Question Sauvegarde verif taille&date --> rapport mail

Plus d'informations
il y a 14 ans 4 mois #10525 par UrZA
Bonjour à tous, c'est à mon tour de contribuer humblement avec mon premier script de débutant :blush:
Je suis assez fier de mon apprentissage qui m'a permis en 1~ semaine d'arriver à ce qui va suivre. Encore merci à ceux qui m'ont aider sur le forum :)
J’espère qu'il sera utile à certains d'entre vous.

Son fonctionnement: Le but est de récuperer la taille & la date d'un ou plusieurs fichiers de type * est de stocker dans un CSV les property (name, lenght, date. Le lendemain via une tache plannifié, rebelotte il ressort un nouveau CSV et compare les 2 tableaux.
Puis envoie un rapport OK ou ERROR (si taille est inférieur, ou la date).

Un fichier conf vous permet de spécifié les 11 paramètres dont le type de fichier l'emplacement ainsi que tous les paramètres mails nécessaire (avec auth via serveur smtp)
2 fichiers, un conf.ps1 et le script lui même (à mettre dans le même répertoire)Le fichier conf ci dessous

[code:1]#+
+
# Bienvenue sur l'assistant configuration des check_backup
#+
+
Write-host \"Configuration des paramètres des fichiers à vérifier (emplacement et type) 11 Questions:\"

$cfg = Read-Host -prompt \"1/11 Merci d'indiquer où vous allez sauvegarder votre fichier de configuration, vous devez le mettre dans le même dossier que check_backup.ps1\"
$path = read-host -prompt \"2/11 Merci d'indiquer l'emplacement de vos sauvegardes, n'oubliez pas le \ à la fin\"
$type = read-host -prompt \"3/11 Merci d'indiquer le type de vos sauvegardes, n'oubliez pas le . au début\"
$report = read-host -prompt \"4/11 Merci d'indiquer l'emplacement des différents reports, n'oubliez pas le \ à la fin\"

Write-host \"Configuration des paramètres pour envoi des rapports par mail\"

$to = Read-host -prompt \&quot;5/11 Merci d'indiquer l'adresse de reception du mail ex: User &lt;user@domain.net&gt;, User2 <User2@domain.net&gt;\&quot;
$from = Read-Host -prompt \&quot;6/11Merci d'indiquer l'expéditeur du mail ex: User &lt;user@domain.net&gt;\&quot;
$subject = read-host -prompt \&quot;7/11 Merci d'indiquer un titre à votre sujet Mail\&quot;
$smtpserver = Read-Host -prompt \&quot;8/11 Merci d'indiquer le serveur smtp\&quot;
$cc = Read-host -prompt \&quot;9/11 Merci d'indiquer un destinataire en cc\&quot;
$usermail = read-host -prompt \&quot;10/11 Entrer un user autorisé à l'envoi du mail domain.com\user\&quot;
$pwd = Read-Host -prompt \&quot;11/11 Entrer un mot de passe\&quot; -AsSecureString | ConvertFrom-SecureString

get-variable path,type,report,to,from,subject,smtpserver,cc,usermail,pwd | Export-Csv \&quot;$cfg\conf.csv\&quot;
write-host \&quot;Fichier csv generé à l'emplacement: $cfg\\&quot;

write-host \&quot;Genération du premier tableau de base pour la comparaison...\&quot;
Get-ChildItem $path* -recurse -include *$type | select-object -Property name, length, Lastwritetime | export-csv $report\new_app_report.csv

write-host \&quot;Configuration terminée...\&quot;[/code:1]

Le script

[code:1]
#+
+
# !!!! Récupération des variables du fichier conf.csv
#+
+
write-host \&quot;Récupération des variables...\&quot;
$cfg = import-csv conf.csv
$path = $cfg[0].Value
$type = $cfg[1].Value
$Report = $cfg[2].Value
$to = $cfg[3].Value
$from = $cfg[4].Value
$subject = $cfg[5].Value
$smtpserver = $cfg[6].Value
$cc = $cfg[7].Value
$usermail = $cfg[8].Value
$pwd = $cfg[9].Value | convertto-securestring
$Credential = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $Usermail, $pwd

write-host \&quot;L'emplacement des fichiers se trouve là : $($cfg[0].Value)\&quot;
write-host \&quot;L'emplacement du programme se trouve là : $($cfg[2].Value)\&quot;
Write-Host \&quot;Le type de fichier est : $($cfg[1].Value)\&quot;
Write-Host \&quot;L'emplacement des reports est là: $($cfg[2].Value)\&quot;
Write-host \&quot;Le sujet du mail sera: $($cfg[3].Value)\&quot;

#+
+
#Script de verification des sauvegardes (date &amp; tailles)
#+
+
write-host \&quot;Lancement des vérifications des $($type)...\&quot;


#+
# Suppression &amp; Renommage des rapports pour les mettre à jour
#+
Write-Host \&quot;Suppression &amp; renommage des rapports csv/txt\&quot;
del $Report\report.txt
del $Report\old_app_report.csv
rename-item -path $Report\new_app_report.csv -NewName old_app_report.csv

#+
+
#+ On compte le nombre de fichiers à tester
#+ Et on attribue le nombre à la variable $nb
#+
+
Write-Host \&quot;Calcul du nombre de $($type)\&quot;
$NB = (Get-ChildItem $path* -recurse -include *$type).count

#+
+
#+ On recupère les proprietés qui nous intéresse
#+ et on les exporte en csv
#+
+
Write-host \&quot;Récupération des paramètres des fichiers\&quot;
Get-ChildItem $path* -recurse -include *$type | select-object -Property name, length, Lastwritetime | export-csv $report\new_app_report.csv

#+
+
#+ On importe les CSV pour les comparer
#+
+
Write-Host \&quot;Importation des variables csv pour comparaison\&quot;
$x = import-csv $report\old_app_report.csv
$y = import-csv $report\new_app_report.csv

#+
+
#+ On va comparer chaque paramètre qui nous intéresse
#+ et ressortir un résumé en français
#+ En faisant une boucle basé sur le nombre de Sauvegarde ($nb)
#+
+
Write-Host \&quot;La boucle va se faire $($NB«»)Fois\&quot;
$Z = 0
while ($Z -ne $NB«»)
{
$rt = [decimal]$y[$Z].length -ge [decimal]$x[$Z].length
$rd = $y[$Z].Lastwritetime.compareTo($x[$Z].Lastwritetime)
#+
+
#Convertion des tailles en Go ou Mo pour un affichage plus clair
#+
+
$rt1 = [math]::truncate($y[$Z].length / 1GB«»)
$rt11 = [math]::truncate($y[$Z].length / 1MB«»)
$rt2 = [math]::truncate($x[$Z].length / 1GB«»)
$rt22 = [math]::truncate($x[$Z].length / 1MB«»)
if ($rt -match \&quot;true\&quot; -and $rd -eq 1)
{Write-output \&quot;Le $($y[$z].name) crée le $($y[$z].Lastwritetime) a pour taille $($rt1)Go/$($rt11)Mo est
&gt; OK\&quot; | out-file $report\report.txt -append}
else
{Write-Output \&quot;Le $($y[$z].name) crée le $($y[$z].Lastwritetime) a pour taille $($rt1)Go/$($rt11)Mo est
&gt; ERROR !! (Old: $($x[$z].Lastwritetime) &amp; taille $($rt2)Go/$($rt22)Mo\&quot; | out-file $report\report.txt -append}
$z = $z+1
}
Write-host \&quot;Boucle terminée\&quot;
#+
# Déclaration de variable pour l'envoie de mail
# (Inclus User &amp; Pwd pour auth sur smtp)
#+
Write-Host \&quot;Déclaration variable pour l'envoi mail\&quot;

$encoding = [System.Text.Encoding]::UTF8
$contenu = [string]::join(\&quot;`r`n\&quot;, (Get-Content \&quot;$($report)\report.txt\&quot;«»))

#+
+
#+ La fonction pour envoyer le mail
#+
+
Write-Host \&quot;Envoie de mail en cours...\&quot;
send-mailmessage -to \&quot;$($to)\&quot; -cc \&quot;$($cc)\&quot; -from \&quot;$($from)\&quot; -Subject \&quot;$($subject) $($type)\&quot; -body \&quot;Rapport: Nombre de fichiers: $($nb)`r$($contenu)\&quot; -Encoding $encoding -Attachments \&quot;$($report)\report.txt\&quot; -smtpServer $smtpserver -credential $credential
Write-host \&quot;Fin du script\&quot;
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena