Question Archivage et Préparation CD

Plus d'informations
il y a 17 ans 3 mois #3429 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:)

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

Plus d'informations
il y a 17 ans 3 mois #3441 par Laurent Dardenne
chm69 écrit:

avant que je puisse finaliser ce développement

Puisque le dev est terminé, tu peux maintenant passer aux tests :P
Par exemple consulte ce post

Tutoriels PowerShell

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

Plus d'informations
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.

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

Plus d'informations
il y a 17 ans 3 mois #3444 par Laurent Dardenne
chm69 écrit:

J'ai testé mes scripts avant de les poster.

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é.

Tutoriels PowerShell

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

Plus d'informations
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

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

Plus d'informations
il y a 17 ans 3 mois #3453 par Laurent Dardenne
chm69 écrit:

T'as vu un truc et tu dis rien, cachotier

je me suis souvenu d'un pb potentiel avec la fonction sendmail mais je n'avais pas le temps de vérifier.
chm69 écrit:

En plus tu me fous le doute

Conseil du jour : « Soyez pessimistes, pensez échec! »
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
Propulsé par Kunena