- forum
- PowerShell
- Contributions à la communauté
- Copie de fichiers avec verifiaction si deja existants dans destination par Hash
Question Copie de fichiers avec verifiaction si deja existants dans destination par Hash
- Bruce
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 2 ans 1 mois - il y a 2 ans 1 mois #32519
par Bruce
Copie de fichiers avec verifiaction si deja existants dans destination par Hash a été créé par Bruce
Bonjour,
Voici un petit script qui m'a été demandé par un utilisateur, le but est de sauvegarder certains fichiers (ici 3 fichiers Excel) qui sont renseignés par un utilisateur par très à l'aise avec l'outils informatique durant la période d'été. Bien que nous aillons des sauvegardes qui permettent de remonter 1 mois auparavant, le responsable aime avoir une visualisation de ces fichiers dans un répertoire ou seul lui ait l'accès et ainsi pouvoir visualiser les évolutions de ces fichiers.
Ce script est exécuté par une tache planifiée chaque jour et envoi un mail concernant l'état de la copie de ces 3 fichiers.
Voici le code:
Voici un petit script qui m'a été demandé par un utilisateur, le but est de sauvegarder certains fichiers (ici 3 fichiers Excel) qui sont renseignés par un utilisateur par très à l'aise avec l'outils informatique durant la période d'été. Bien que nous aillons des sauvegardes qui permettent de remonter 1 mois auparavant, le responsable aime avoir une visualisation de ces fichiers dans un répertoire ou seul lui ait l'accès et ainsi pouvoir visualiser les évolutions de ces fichiers.
Ce script est exécuté par une tache planifiée chaque jour et envoi un mail concernant l'état de la copie de ces 3 fichiers.
Voici le code:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
Clear-Host
# Copie de fichiers avec verif si existance dans dossier destination par hashtable et envoi de mail d'info
# A mettre en tache planifiée
# Selection de 3 fichiers specifiques a copier (ici au format Excel)
#======================================================================================================
# Activation de Mode TEST: TRUE ou FALSE -> affiche les infos a l'ecran en mode test
$testing = $true
#======================================================================================================
# Parametres pour envoi de rapport par mail
$smtpServer="192.168.169.170" # IP de votre serveur de mail par exemple
$from = "INFO COPIE <MonitoringCopy@monserveur.com>" # adresse de l'expediteur du mail pour votre script
$adminEmailAddr = "admin1@monserveur.com","user1@monserveur.fr"
$testingEmailAddr = "admin1@monserveur.com"
$textEncoding = [System.Text.Encoding]::UTF8
$SendMail = $true
#======================================================================================================
# VARIABLES FICHIERS
$sourcedir = "C:\users\public"
$destdir = "C:\sauvegarde"
$prefix = get-date -format yyyy-MM-dd-
$file1 = "fichier1.xlsx".ToLower()
$file2 = "fichier2.xlsx".ToLower()
$file3 = "fichier3.xlsx".ToLower()
#======================================================================================================
# Corps du Mail
$now = Get-Date -UFormat '%m-%d-%y %H:%M'
$body = "
<p>Contrôle de copie des fichiers</br>
<b>Fichiers sources à copier:</b>
</p><ul>
<li><b>$file1</b></li>
<li><b>$file2</b></li>
<li><b>$file3</b></li></ul></br>
Dossier source: <i>$sourcedir</i></br>
Dossier destination: <i>$destdir</i></br></br>
Execution le $now</br></br>"
#======================================================================================================
#Recupere le nom du script
$ScriptName = $MyInvocation.MyCommand.Name
#Chemin du répertoire contenant le script
$RepScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition)
# Recupération des infos du domaine
$SearchBase = (Get-AdDomainController).defaultpartition # Resultat: DC=votredomaine,DC=local
$domain = $SearchBase -Split "," | ? {$_ -like "DC=*"} # Resultat: DC=votredomaine DC=local
$domain = $domain -join "." -replace ("DC=", "") # Resultat: votredomaine.local
#Nom du serveur d'execution du script
$serveur = [system.environment]::MachineName
#======================================================================================================
# DEBUT DU SCRIPT
if ((Test-Path -Path $sourcedir) -and (Test-Path -Path $destdir)) # teste si les repertoires source et cibles sont existants
{
$SourceFiles = Get-ChildItem –Path $sourcedir -Recurse -File -include "*.xlsx" # recupere les fichiers du repertoire source au format Excel
Foreach ($fichier in $SourceFiles)
{
$filename = $fichier.Name.ToLower() #nom du fichier en minuscule
if (($filename -like $file1) -or($filename -like $file2) -or ($filename -like$file3)) #verifie la correspondance du fichier avec ceux a copier
{
$sourcefile = $sourcedir + "\" + $fichier.Name
$destfile = $destdir + "\" + $prefix + $fichier.Name
if (Test-Path -Path $destfile) # verifie si le fichier existe à l'emplacement cible
{
$hashdest = Get-FileHash -Algorithm SHA1 -Path $destfile #recupere le hash du fichier existant dans la destination
$hashsource = Get-FileHash -Algorithm SHA1 -Path $fichier #recupere le hash du fichier source
if ($hashsource.Hash -eq $hashdest.Hash) # compare le hash des 2 fichiers
{
$body+="<b>$destfile</b><font color=""FF0000""> existe déjà !</font></br>"
if ($testing -eq $true) {write-host -ForegroundColor Red -BackgroundColor Yellow "$destfile existe déjà !!"}
}
}else
{
copy-item -path $sourcefile -destination $destfile -Force -ErrorAction SilentlyContinue
$body+="<b>$destfile</b><font color=""00FF00""> - Copie réussie</font></br>"
if ($testing -eq $true) {write-host -ForegroundColor Yellow -BackgroundColor Blue "copie réussie : $destfile"}
}
}
}
if ($testing -eq $true) {write-host -ForegroundColor White -BackgroundColor Green "FIN !"}
}else
{
if ($testing -eq $true) {write-host -ForegroundColor Red -BackgroundColor Yellow "Dossier source ou destination non present !!"}
$body+="<font color=""FF0000""><b>Dossier source ou destination non present !!</font></b>"
}
#Choix du destinataire du mail en fonction du mode Test
if ($testing -eq $true)
{
$recipient = $testingEmailAddr
$subject="Mode test: Copie des fichiers EXCEL"
}else
{
$recipient = $adminEmailAddr
$subject="INFO: Copie des fichiers EXCEL"
}
$body+="
<p>Serveur d'execution du script: <b>$serveur</b><br>
Nom du script: <font color=""0000FF"">$ScriptName</font><br>
Localisation du script: <font color=""0000FF"">$RepScript</font><br>
<br><br>
L'équipe Support<br>
hotline@monserveur.com<br>
https://monserveur.com<br></p>"
# Envoi du mail
if ($sendmail -eq $true)
{
Send-Mailmessage -smtpServer $smtpServer -from $from -to $recipient -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding -ErrorAction Stop -ErrorVariable err
}
Dernière édition: il y a 2 ans 1 mois par Laurent Dardenne. Raison: balise code
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Contributions à la communauté
- Copie de fichiers avec verifiaction si deja existants dans destination par Hash
Temps de génération de la page : 0.096 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- Copie de fichiers avec verifiaction si deja existants dans destination par Hash