Question Archivage et Préparation CD
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 128
- Remerciements reçus 0
il y a 17 ans 3 mois #3429
par michault
Archivage et Préparation CD a été créé par michault
Comme promis et en toute humilité, je poste 2 scripts qui me permettent d'archiver des dossiers d'une part et de préparer leur gravage d'autre part.
Script 1
[code:1]#ArchiveCourrierQDR.ps1
#
#Définition des constantes
$log = \"C:\PWRSHELL\logArchiveCourrierQDR.txt\"
$year = (get-date).adddays(-(date).day).get_year()
$month = (get-date).adddays(-(date).day).get_month()
#Suppression fichier log avant éxécution
if((Test-Path -Path $log) -eq $true)
{
Del $log
}
#Archivage
$dos_source = \"\\Chemin_source\DOC\" + $year+ $month
$dos_cible = \"\\Chemin_archive\DOC\" + $year + $month
CopyFolder $dos_source $dos_cible $log
#Purge
DeleteFolder $dos_source $log
#Envoi log par mail
$to = \"xxxxx@xxxxxxxxx.xx\"
$subject = \"RESULTAT ARCHIVAGE MENSUEL COURRIER QDR\"
$body = \"Veuillez trouver ci-joint le résultat de l'archivage mensuel\"
$smtpHost = \"xxxx\"
$from = \"xxxx@xxxxxxxx.xx\"
SendMail $to $subject $body $smtpHost $from $log[/code:1]
J'aurai pu paramétrer un peu plus ce script mais je fais des copies sur plusieurs machines. J'ai donc préféré utiliser des fonctions et écrire \"en dur\" ce script spécifique à un besoin.
J'ai plusieurs fonctions dans ce script.
Les voici:
[code:1]#####################################################
# Copie Dossier(s)
#####################################################
Function CopyFolder {
# Paramètres: $dos_source : Dossier source à archiver
# $dos_cible : Dossier cible
# $log : Fichier trace
Param($dos_source,$dos_cible,$log)
$result = Test-Path -Path $dos_source
$Date = Get-Date -Format G
if ($result -eq $true)
{
$Date + \" : Dossier(s) \" + $dos_source + \" trouvé(s).\" | Out-File $log -Append -NoClobber
$result = Test-Path -Path $dos_cible
if ($result -eq $true)
{
$Date + \" : Dossier(s) \" + $dos_cible + \" déjà présent(s). Archivage intérrompu.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
Copy-Item $dos_source -Destination $dos_cible -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?)
{
$Date + \" : Dossier(s) \" + $dos_source + \" archivé(s) en \" + $dos_cible | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
$Date + \" : L'archivage dossier(s) \" + $dos_source + \" a échoué.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}
}
else
{
$Date + \" : Dossier(s) \" + $dos_source + \" non trouvé(s). Copie impossible.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}[/code:1]
[code:1]#####################################################
# Suppression Dossier(s)
#####################################################
Function DeleteFolder {
# Paramètres: $folder : Dossier à supprimer
# $log : Fichier trace
Param($folder,$log)
$result = Test-Path -Path $folder
$Date = Get-Date -Format G
if ($result -eq $true)
{
Remove-Item $folder -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?)
{
$Date + \" : Dossier(s) \" + $folder + \" supprimé(s).\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
$Date + \" : La suppression de(s) dossier(s) \" + $folder + \" a échoué.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}
else
{
$Date + \" : Dossier(s) \" + $folder + \" non trouvé(s). Suppression impossible.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}[/code:1]
[code:1]#####################################################
# Envoi de mail
#####################################################
Function SendMail {
# Paramètres: $to : Destinataire(s)
# $Subject : Sujet
# $body : Coprs du message
# $smtpHost : Serveur SMTP
# $from : Expéditeur
# $attach : Pièce jointe
param(
[string[]] $to = $(throw \"Veuillez renseigner les destinataires\"«»),
[string] $subject = \"<No Subject>\",
[string] $body = $(throw \"Veuillez définir le corps du message\"«»),
[string] $smtpHost = $(throw \"Veuillez spécifier les serveur SMTP.\"«»),
[string] $from,
[string] $attach
)
## Create the mail message
$email = New-Object System.Net.Mail.MailMessage
## Populate its fields
foreach($mailTo in $to)
{
$email.To.Add($mailTo)
}
$email.From = $from
$email.Subject = $subject
$email.Body = $body
if ( $Attach -ne [string]::Empty)
{
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
## Send the mail
$client = New-Object System.Net.Mail.SmtpClient $smtpHost
$client.UseDefaultCredentials = $true
$client.Send($email)
}[/code:1]
Script 2
[code:1]#PrépaCDCourrierQDR.ps1
# Paramètres: $source : Emplacement des dossiers à mettre éventuellement sur CD
# $delai : Combien de mois garde-t-on sur le serveur en jours
# $log : Fichier trace exemple \"C:\PWRSHELL\PrépaCDCourrierQDR.txt\"
Param($source,$delai,$log)
#Définition des constantes
#Suppression fichier log avant éxécution
if((Test-Path -Path $log) -eq $true)
{
Del $log
}
#Déplacement COMP de SRVENT1 vers CD
$cible = $source + \"PREPACD\\"
$dos_source = $source + \"DOC*\"
$dos_cible = $source + \"PREPACD\"
$total = GetDirSize $dos_cible
$total /= (1024*1024)
Get-ChildItem $dos_source | where {$_.creationtime -lt (Get-Date).adddays($delai)} |
ForEach-Object {
$name = $_.name
$taille = GetDirSize $_.
$taille /= (1024*1024)
$total += $taille
if ($total -gt 700MB )
{
#Envoi Alerte Gravage par mail
$to = \"xxxxx@xxxxxxxx.xx\"
$subject = \"ALERTE PREPARATION CD COURRIER QDR\"
$body = \"Des dossiers contenus dans \" + $cible + \" sont prêts à être descendus sur CD\"
$smtpHost = \"xxxx\"
$from = \"xxxxx@xxxxxxxx.xxx\"
SendMail $to $subject $body $smtpHost $from
exit
}
else
{
$objet_source = $source + $name
$objet_cible = $cible + $name
MoveFolder $objet_source $objet_cible $log
}
}
#Envoi log par mail
$to = \"xxxxx@xxxxxxxx.xx\"
$subject = \"PREPARATION CD COURRIER QDR\"
$body = \"Des dossiers ont été déplacés en vue de gravage\"
$smtpHost = \"xxxxx\"
$from = \"xxxxx@xxxxxxxx.xx\"
SendMail $to $subject $body $smtpHost $from $log[/code:1]
J'ai encore une fonction dans ce script.
La voici:
[code:1]#####################################################
# Taille d'un dossier
#####################################################
function GetDirSize {
param ([string]$path)
$i=0
Get-ChildItem $path -recurse -force| foreach -process {$i+=$_.length}
return $i
}[/code:1]
Ces 2 scripts sont appelés via un point CMD déclenché par une tâche planifiée.
[code:1]powershell c:\PWRSHELL\EXPLOITATION\ArchiveCourrierQDR.ps1
powershell c:\PWRSHELL\EXPLOITATION\PrépaCDCourrierQDR.ps1 -source('\\chemin source\') -delai('-90') -log('C:\PWRSHELL\logPrepaCDCourrierQDR.txt')[/code:1]
Voilà, j'avais prévenu rien de très compliqué mais très utile. Et quand je dis \"rien de très compliqué \", il faut quand même précisé que Laurent m'a beaucoup aidé avant que je puisse finaliser ce développement.
Merci encore à lui:)
Script 1
[code:1]#ArchiveCourrierQDR.ps1
#
#Définition des constantes
$log = \"C:\PWRSHELL\logArchiveCourrierQDR.txt\"
$year = (get-date).adddays(-(date).day).get_year()
$month = (get-date).adddays(-(date).day).get_month()
#Suppression fichier log avant éxécution
if((Test-Path -Path $log) -eq $true)
{
Del $log
}
#Archivage
$dos_source = \"\\Chemin_source\DOC\" + $year+ $month
$dos_cible = \"\\Chemin_archive\DOC\" + $year + $month
CopyFolder $dos_source $dos_cible $log
#Purge
DeleteFolder $dos_source $log
#Envoi log par mail
$to = \"xxxxx@xxxxxxxxx.xx\"
$subject = \"RESULTAT ARCHIVAGE MENSUEL COURRIER QDR\"
$body = \"Veuillez trouver ci-joint le résultat de l'archivage mensuel\"
$smtpHost = \"xxxx\"
$from = \"xxxx@xxxxxxxx.xx\"
SendMail $to $subject $body $smtpHost $from $log[/code:1]
J'aurai pu paramétrer un peu plus ce script mais je fais des copies sur plusieurs machines. J'ai donc préféré utiliser des fonctions et écrire \"en dur\" ce script spécifique à un besoin.
J'ai plusieurs fonctions dans ce script.
Les voici:
[code:1]#####################################################
# Copie Dossier(s)
#####################################################
Function CopyFolder {
# Paramètres: $dos_source : Dossier source à archiver
# $dos_cible : Dossier cible
# $log : Fichier trace
Param($dos_source,$dos_cible,$log)
$result = Test-Path -Path $dos_source
$Date = Get-Date -Format G
if ($result -eq $true)
{
$Date + \" : Dossier(s) \" + $dos_source + \" trouvé(s).\" | Out-File $log -Append -NoClobber
$result = Test-Path -Path $dos_cible
if ($result -eq $true)
{
$Date + \" : Dossier(s) \" + $dos_cible + \" déjà présent(s). Archivage intérrompu.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
Copy-Item $dos_source -Destination $dos_cible -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?)
{
$Date + \" : Dossier(s) \" + $dos_source + \" archivé(s) en \" + $dos_cible | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
$Date + \" : L'archivage dossier(s) \" + $dos_source + \" a échoué.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}
}
else
{
$Date + \" : Dossier(s) \" + $dos_source + \" non trouvé(s). Copie impossible.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}[/code:1]
[code:1]#####################################################
# Suppression Dossier(s)
#####################################################
Function DeleteFolder {
# Paramètres: $folder : Dossier à supprimer
# $log : Fichier trace
Param($folder,$log)
$result = Test-Path -Path $folder
$Date = Get-Date -Format G
if ($result -eq $true)
{
Remove-Item $folder -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?)
{
$Date + \" : Dossier(s) \" + $folder + \" supprimé(s).\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
else
{
$Date + \" : La suppression de(s) dossier(s) \" + $folder + \" a échoué.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}
else
{
$Date + \" : Dossier(s) \" + $folder + \" non trouvé(s). Suppression impossible.\" | Out-File $log -Append -NoClobber
\" \" | Out-File $log -Append -NoClobber
}
}[/code:1]
[code:1]#####################################################
# Envoi de mail
#####################################################
Function SendMail {
# Paramètres: $to : Destinataire(s)
# $Subject : Sujet
# $body : Coprs du message
# $smtpHost : Serveur SMTP
# $from : Expéditeur
# $attach : Pièce jointe
param(
[string[]] $to = $(throw \"Veuillez renseigner les destinataires\"«»),
[string] $subject = \"<No Subject>\",
[string] $body = $(throw \"Veuillez définir le corps du message\"«»),
[string] $smtpHost = $(throw \"Veuillez spécifier les serveur SMTP.\"«»),
[string] $from,
[string] $attach
)
## Create the mail message
$email = New-Object System.Net.Mail.MailMessage
## Populate its fields
foreach($mailTo in $to)
{
$email.To.Add($mailTo)
}
$email.From = $from
$email.Subject = $subject
$email.Body = $body
if ( $Attach -ne [string]::Empty)
{
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
## Send the mail
$client = New-Object System.Net.Mail.SmtpClient $smtpHost
$client.UseDefaultCredentials = $true
$client.Send($email)
}[/code:1]
Script 2
[code:1]#PrépaCDCourrierQDR.ps1
# Paramètres: $source : Emplacement des dossiers à mettre éventuellement sur CD
# $delai : Combien de mois garde-t-on sur le serveur en jours
# $log : Fichier trace exemple \"C:\PWRSHELL\PrépaCDCourrierQDR.txt\"
Param($source,$delai,$log)
#Définition des constantes
#Suppression fichier log avant éxécution
if((Test-Path -Path $log) -eq $true)
{
Del $log
}
#Déplacement COMP de SRVENT1 vers CD
$cible = $source + \"PREPACD\\"
$dos_source = $source + \"DOC*\"
$dos_cible = $source + \"PREPACD\"
$total = GetDirSize $dos_cible
$total /= (1024*1024)
Get-ChildItem $dos_source | where {$_.creationtime -lt (Get-Date).adddays($delai)} |
ForEach-Object {
$name = $_.name
$taille = GetDirSize $_.
$taille /= (1024*1024)
$total += $taille
if ($total -gt 700MB )
{
#Envoi Alerte Gravage par mail
$to = \"xxxxx@xxxxxxxx.xx\"
$subject = \"ALERTE PREPARATION CD COURRIER QDR\"
$body = \"Des dossiers contenus dans \" + $cible + \" sont prêts à être descendus sur CD\"
$smtpHost = \"xxxx\"
$from = \"xxxxx@xxxxxxxx.xxx\"
SendMail $to $subject $body $smtpHost $from
exit
}
else
{
$objet_source = $source + $name
$objet_cible = $cible + $name
MoveFolder $objet_source $objet_cible $log
}
}
#Envoi log par mail
$to = \"xxxxx@xxxxxxxx.xx\"
$subject = \"PREPARATION CD COURRIER QDR\"
$body = \"Des dossiers ont été déplacés en vue de gravage\"
$smtpHost = \"xxxxx\"
$from = \"xxxxx@xxxxxxxx.xx\"
SendMail $to $subject $body $smtpHost $from $log[/code:1]
J'ai encore une fonction dans ce script.
La voici:
[code:1]#####################################################
# Taille d'un dossier
#####################################################
function GetDirSize {
param ([string]$path)
$i=0
Get-ChildItem $path -recurse -force| foreach -process {$i+=$_.length}
return $i
}[/code:1]
Ces 2 scripts sont appelés via un point CMD déclenché par une tâche planifiée.
[code:1]powershell c:\PWRSHELL\EXPLOITATION\ArchiveCourrierQDR.ps1
powershell c:\PWRSHELL\EXPLOITATION\PrépaCDCourrierQDR.ps1 -source('\\chemin source\') -delai('-90') -log('C:\PWRSHELL\logPrepaCDCourrierQDR.txt')[/code:1]
Voilà, j'avais prévenu rien de très compliqué mais très utile. Et quand je dis \"rien de très compliqué \", il faut quand même précisé que Laurent m'a beaucoup aidé avant que je puisse finaliser ce développement.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 3 mois #3441
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Archivage et Préparation CD
chm69 écrit:

Par exemple consulte ce post
Puisque le dev est terminé, tu peux maintenant passer aux testsavant que je puisse finaliser ce développement
Par exemple consulte ce post
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 128
- Remerciements reçus 0
il y a 17 ans 3 mois #3443
par michault
Réponse de michault sur le sujet Re:Archivage et Préparation CD
J'ai testé mes scripts avant de les poster.
Je jette un coup d'oeil à ton post un peu plus tard.
Je jette un coup d'oeil à ton post un peu plus tard.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 3 mois #3444
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Archivage et Préparation CD
chm69 écrit:
Je ne voulais pas t'offenser en disant cela, je voulais pointer le fait qu'il y a peut être plusieurs scénarios de tests auquels tu n'a pas pensé.J'ai testé mes scripts avant de les poster.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 128
- Remerciements reçus 0
il y a 17 ans 3 mois #3448
par michault
Réponse de michault sur le sujet Re:Archivage et Préparation CD
Pas d'offense rassures-toi;)
T'as vu un truc et tu dis rien, cachotier:P
En plus tu me fous le doute:blink:<br><br>Message édité par: chm69, à: 11/12/08 06:35
T'as vu un truc et tu dis rien, cachotier:P
En plus tu me fous le doute:blink:<br><br>Message édité par: chm69, à: 11/12/08 06:35
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 3 mois #3453
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Archivage et Préparation CD
chm69 écrit:
chm69 écrit:
Issu d'un dossier de Valtech Etes-vous prêts pour la production ?
je me suis souvenu d'un pb potentiel avec la fonction sendmail mais je n'avais pas le temps de vérifier.T'as vu un truc et tu dis rien, cachotier
chm69 écrit:
Conseil du jour : « Soyez pessimistes, pensez échec! »En plus tu me fous le doute
Issu d'un dossier de Valtech Etes-vous prêts pour la production ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.109 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Archivage et Préparation CD