Question Powershell gestion des sauvegardes

Plus d'informations
il y a 3 ans 5 mois #30057 par POTEY
Bonjour,

Je suis en train de mettre en place 3 scritps qui vont me permettre pour le premier de copier mes sauvegardes vers un serveur centralisé. Il va cherché dans un fichier CSV le répertoire source, le nom du ou des fichiers, le répertoire de destination et le nombre maximum d'occurrence (non implémenté). Le second script fait le ménage dans les deux répertoires (sources et destination) d'un autre fichier CSV. Son fichier CSV contient 4 colonnes la source, le délai de rétention en jour, la destination, le délai de rétention de destination. Un troisième script s'occupera à lancer les scripts de lancement de sauvegarde, ce sera le premier à utiliser.

Mon premier script fonctionne pas mal mais il est peut être perfectible :

# Activation du fichier de log

$varDate=(get-date -format yyyy-MM-dd)

start-transcript -path "C:\Temp\log_$varDate.txt"

$csvFile = "C:\Temp\SAVE_BDD.csv"
$table = Import-Csv $csvFile -Delimiter ";"


Set-Variable srcSite, dstSite , nameDump, tpsRetention
foreach ($row in $table) {
Clear-Variable srcSite
Clear-Variable dstSite
Clear-Variable nameDump
Clear-Variable tpsRetention

$srcSite = $row.Source
$dstSite = $row.Destination
$nameDump= $Row.Dump
$tpsRetention= $Row.Retention

robocopy $srcSite $dstSite $nameDump /mt /z /MAXAGE:5
# /mt permet le multi threading sans valeur la valeur par défaut est 8
# /z permet la copie des fichiers en mode redémarrable
#/MAXAGE :5 permet de ne pas copier les fichier de plus de 5 jours


}
robocopy C:\Temp\ \\NELSON\DUMP_BDD\_Logs "log_$varDate.txt" /MIR
# Désactivation des logs
Stop-Transcript


Pour le second script il fonctionnait bien sur mon poste à la maison mais lorsque je l'exécute il se comporte bizarrement


# Activation du fichier de log

$varDate=(get-date -format yyyy-MM-dd)

start-transcript -path "C:\Temp\log_Gestion_Historique_$varDate.txt"

$csvFile = "C:\Temp\Historique.csv"
$table = Import-Csv $csvFile -Delimiter ";"



Set-Variable srcSite, dstSite , nameDump, tpsRetSrc, tpsRetDest
foreach ($row in $table) {
Clear-Variable srcSite
Clear-Variable dstSite
Clear-Variable tpsRetSrc
Clear-Variable tpsRetDest

$srcSite = $row.Source
$dstSite = $row.Destination
$tpsRetSrc= $Row.Retention_Src
$tpsRetDest= $Row.Retention_Dest



ADD-content -path C:\Temp\deletedbackups$varDate.txt -value "Fichiers_supprimés_sur $srcSite"

Get-ChildItem $srcSite -Recurse -Force -ea 0 | ? {!$_.PsIsContainer -and $_.LastwriteTime -lt (Get-Date).AddDays(-$tpsRetSrc)} | ForEach-Object { $_ | del -Force $_.FullName | Out-File C:\Temp\deletedbackups$varDate.txt -Append }

ADD-content -path C:\Temp\deletedbackups$varDate.txt -value "Fichiers_supprimés_sur $dstSite"

Get-ChildItem $dstSite -Recurse -Force -ea 0 | ? {!$_.PsIsContainer -and $_.LastwriteTime -lt (Get-Date).AddDays(-$tpsRetDest)} | ForEach-Object { $_ | del -Force $_.FullName | Out-File C:\Temp\deletedbackups$varDate.txt -Append }


robocopy C:\Temp\ \\NELSON\Dump_BDD\_Logs "deletedbackups$varDate.txt" /MIR

}
# Désactivation des logs
Stop-Transcript

Il y a t'il des anomalies dans mon script qui explique pourquoi il va me supprimer des fois des fichiers dans mon c:\windows\system32 … ? Peut il être simplifié ?


Je souhaiterais le faire évoluer pour sur le fichier de sortie deletedbackups_XXX.txt, il m'ajoute la date de création, la date dernier accés et de dernière modification.
Merci de votre aide par avance

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

Plus d'informations
il y a 3 ans 5 mois #30058 par POTEY
Réponse de POTEY sur le sujet Powershell gestion des sauvegardes
Je rencontre actuellement le message suivant pour chaque éléments copié :

del : L'objet d'entrée ne peut être lié à aucun paramètre de la commande, soit parce que cette commande n'accepte pas l'entrée de pipeline, soit parce que l'entrée et ses propriétés ne
correspondent à aucun des paramètres qui acceptent l'entrée de pipeline.
Au caractère C:\Temp\Gestion_Historique_BDD.ps1:32 : 153
+ ... -Object { $_ | del -Force $_.FullName | Out-File C:\Temp\deletedbackups$varDate. ...
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (INSEE_PACS_201910151102_NB3.xml:PSObject) [Remove-Item], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.RemoveItemCommand


INSEE_PACS_201910151102_NB3 c'est un des fichiers transférés.

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

Plus d'informations
il y a 3 ans 5 mois #30059 par POTEY
Réponse de POTEY sur le sujet Powershell gestion des sauvegardes
Je crois que c'est bon maintenant sous cette forme :

Get-ChildItem $dstSite -Recurse -Force -ea 0 |
? {!$_.PsIsContainer -and $_.LastwriteTime -lt (Get-Date).AddDays(-$tpsRetDest)} |
ForEach-Object {
$_ | del -Force
$_.FullName | Out-File C:\Temp\deletedbackups$varDate.txt -Append
}

Si je découpe la ligne comme ça, ça passe !!! Des explications ?
Si vous avez des critiques sur le script, n'hésitez pas.

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

Plus d'informations
il y a 3 ans 5 mois #30063 par POTEY
Réponse de POTEY sur le sujet Powershell gestion des sauvegardes
le problème ne venait pas de l’indentation ou d u fait de couper les lignes.
Le problème venait du répertoire où je me positionnais. J'ai ajouté une ligne cd c:\temp pour me positionner sr le bon répertoire. Lorsque je l'exécute en tache planifié, j'indique qu'il faut le lancer dans c:`\temp

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

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