Membres: 1422  •  Messages: 46584  •  Sujets: 6144  •  Merci d'accueillir samiopt, notre dernier membre.
Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
avancée  


Auteur Sujet: Script de récupération de données  (Lu 2956 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #15 le: 12 février 2009 à 09:07:48 »
ah tu veux garder cette histoire de 7 jours quand même ?
Oui oui. Je sais, je suis difficile.

Citation
en tout cas la solution d'un fichier texte par synchronisation n'est pas bonne, en effet on peu synchroniser plusieurs fois par jour
ce qu'il faut c'est en seul endroit garder une liste des fichiers avec associé la date/heure de la dernière fois qu'on l'a vu
J'ai du mal à comprendre cette phrase. Voudrais-tu dire que mon idée de lister les fichiers présents chaque jour dans un fichier texte n'est pas bonne ? Le soucis c'est que je vois mal comment faire autrement, mais je ne doute pas de toi pour trouver des alternatives efficaces (là je te met la pression).
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Re : Script de récupération de données
« Réponse #16 le: 12 février 2009 à 09:12:05 »
Citation
en tout cas la solution d'un fichier texte par synchronisation n'est pas bonne, en effet on peu synchroniser plusieurs fois par jour
ce qu'il faut c'est en seul endroit garder une liste des fichiers avec associé la date/heure de la dernière fois qu'on l'a vu
J'ai du mal à comprendre cette phrase. Voudrais-tu dire que mon idée de lister les fichiers présents chaque jour dans un fichier texte n'est pas bonne ? Le soucis c'est que je vois mal comment faire autrement, mais je ne doute pas de toi pour trouver des alternatives efficaces (là je te met la pression).
c'est la bonne mais ce que je voulais dire c'est d'avoir un seul unique fichier et pas 1 fichier par synchronisation
ça sera fait probablement avec un tableau associatif qui fait le lien entre un fichier et la date/heure de la dernière qu'on l'as vu
genre : c:\fichier.doc - 10/02/08 12:53
à chaque synchronisation on met à jour
- soit la date/heure
- soit en effaçant l'entrée (et le fichier) parce que plus présent depuis 7j
- soit rien du tout parce que effacé depuis moins de 7j
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #17 le: 12 février 2009 à 10:07:34 »
Ah oui oui, c'est probablement encore mieux que ce que j'avais en tête effectivement.

Bon et bien il ne te reste plus qu'à faire des heures sup non rémunérées ;)
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Script de récupération de données
« Réponse #18 le: 17 février 2009 à 23:41:07 »
bon, voilà le premier jet
attention, pas testé à fond !! à ne pas utiliser en prod sans tester à fond
à noter que les commandes de copie/suppression sont mises en commentaire pour l'instant

manque encore la gestion de la suppression avec ta règle des 7j

à enregistrer dans un fichier .ps1
Param ($src, $dst);

function Sync-Delete
{
Param ($src, $dst);

# boucle de suppression
# pour chacun des fichiers du répertoire de destination
foreach ($dstFile in Get-ChildItem $dst)
{
# nom complet du fichier à traiter
$srcFile = $src + $dstFile.Name;
if (Test-Path $srcFile)
{
# le fichier source existe
if ($dstFile.Mode.Contains("d"))
{
# on est sur un répertoire
# appel récursif
Sync-Delete $srcFile $dstFile.FullName;
}
}
else
{
# le fichier source n'existe pas
if ($dstFile.Mode.Contains("d"))
{
# on se trouve sur un répertoire
# effacer le répertoire et ses fichiers du répertoire de destination
#Remove-Item $dstFile.FullName "*" -Recurse;
}
else
{
# on se trouve sur un fichier
# effacer le fichier du répertoire de destination
#Remove-Item $dstFile.FullName;
}

Write-Host $dstFile.FullName " suppression" -ForegroundColor red
}
}
}

function Sync-Copy
{
Param ($src, $dst);

# boucle de copie
# pour chacun des fichiers du répertoire source
foreach ($srcFile in Get-ChildItem $src)
{
# nom complet du fichier de destination
$dstFile = $dst + $srcFile.Name;

if ($srcFile.Mode.Contains("d"))
{
# c'est un répertoire

if (-not (Test-Path $dstFile))
{
# le répertoire n'existe pas, le copier en entier
#Copy-Item $srcFile.FullName $dst -Force;
}

# appel récursif
Sync-Copy $srcFile.FullName $dstFile;
continue;
}

if (Test-Path $dstFile)
{
# le fichier de destination existe déjà

if ($srcFile.LastWriteTime -gt (Get-Item $dstFile).LastWriteTime)
{
# le fichier source est plus récent que le fichier de destination -> l'écraser
#Copy-Item $srcFile.FullName $dst -Force;
Write-Host $srcFile.FullName " mis-à-jour" -ForegroundColor yellow;
}
}
else
{
# le fichier de destination n'existe pas encore
#Copy-Item $srcFile.FullName $dst -Force;
Write-Host $srcFile.FullName " nouveau fichier" -ForegroundColor green;
}
}
}

if (-not $src.EndsWith("\")) { $src += "\"; }
if (-not $dst.EndsWith("\")) { $dst += "\"; }

Sync-Delete $src $dst;
Sync-Copy $src $dst;
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #19 le: 18 février 2009 à 14:27:45 »
O-eron tu es un amour. :eole:

Quand tu écris "à tester dans un fichier ps1", j'ai juste à créer un fichier auquel j'attribue cette extension ou dois-je passer par PowerShell ?

Pour le lancer ensuite, je dois passer par PowerShell ?

Merci d'avance pour ta réponse. Dès que je la reçois, je teste tout ça pour traquer les éventuels bugs.
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Script de récupération de données
« Réponse #20 le: 18 février 2009 à 15:51:57 »
il faut juste copier le contenu dans un fichier texte qui se termine en .ps1
pour le lancer tu dois en effet passer par powershell
tu peux aussi lancer powershell en exécutant directement le script, genre : powershell c:\sync.ps1 c:\source d:\destination
attention à bien indiquer le chemin complet vers le fichier ps1
les 2 premiers paramètres sont le dossier de source et de destination
l'exécutable de powershell devrait se trouver dans le path

il faudra probablement régler la sécurité pour l'exécution, voir la commande set-executionpolicy
perso je règle sur unrestricted mais il y a peut être moyen de signer le script avec un certificat local et de pouvoir mettre mieux
je n'ai jamais essayer, donc si tu test ça dit moi quoi :)

pour tester convenablement il faudrait le faire avec plusieurs dossier et à chaque fois écrire la commande qui serait exécuté
histoire de ne pas avoir de mauvaise surprise où le script efface tout c:\  :?
à tester aussi avec des nom de fichier long, je ne sais pas trop comment il réagit, il faut peut être protéger les noms de dossier par des ""
« Dernière modification: 18 février 2009 à 15:59:11 par O-ERON »
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #21 le: 19 février 2009 à 10:59:04 »
Salut O-eron et merci mille fois pour ton aide.

2 bugs à signaler pour l'instant.

Le plus gros, c'est que la copie de fichiers ne se fait pas.
Voici ce que je tape:

J'essaye donc, après désactivation des règles de sécurité, de copier le contenu de c:\temp\test\data vers c:\temp\test\save
Il s'affiche en vers des messages normaux, mais lorsque je vais voir dans le dossier de destination, rien n'a été copié.
Si je relance ton script, les mêmes affichages verts sont visibles, ce qui confirme qu'il n'y a bien pas eu de copie.
J'ai essayé de voir d'où venait le souci dans tes lignes de code; Il me semble qu'à la ligne 85 ("Write-Host $srcFile.FullName " nouveau fichier" -ForegroundColor green;"), tu mentionnes bien l'affichage à l'écran de la copie mais pas sa réalisation effective. Je ne sais malheureusement pas exactement ce qu'il faut ajouter.

Ensuite, j'ai essayé d'inclure la désactivation des règles de sécurité au début du script, puis de la réactiver à la fin. Sa réactivation marche (j'ai juste ajouter "set-executionpolicy default" en dernière ligne). Par contre, sa désactivation ne marche pas. J'ai essayé de taper  "set-executionpolicy remotesigned" tout en début comme après la première ligne (celle des paramètres) et juste avant le lancement de sync-delete. Sans succès.

La mise en place de règles de sécurité ne m'intéresse pas. Pour le travail que cela va demander à être mis en place, ça ne vaut pas la peine dans la mesure ou mon responsable ne s'en préoccupe pas.

Une fois le problème de la copie qui ne se fait pas sera résolu, puis que j'aurais tout testé, il faudrait effectivement implémenter la condition J+7, sans quoi je crains de me pouvoir utiliser le script dans un environnement réel.

Merci d'avance pour ta réponse.
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Script de récupération de données
« Réponse #22 le: 19 février 2009 à 11:07:23 »
comme mentionné dans le message précédent, les fonctions de copie/suppression sont mises en commentaires ;)
pour être plus précis, il faut enlever les "#" devant toutes les commandes Remove-Item et Copy-Item
j'avais fait ça pour tester sans risquer de bousiller tous les fichiers
la commande de suppression d'un répertoire entier me fait peur  :P

les règles de sécurité doivent être désactivés une seule fois
même si tu ferme powershell c'est bon, il va retenir le paramètre
il faut mettre "unrestricted" pour ce type de script
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #23 le: 19 février 2009 à 11:41:31 »
Merci pour ta réponse express.



Je suis donc un lourdaud pour ce qui est de ne pas avoir compris tes commentaires :lol:.



Plusieurs choses:

- La copie de fichiers avec longs noms fonctionne.

- La suppression des fichiers n'existant plus sur le source fonctionne.

- La mise à jour des fichiers modifiés fonctionne.

- La création automatique de sous-dossiers fonctionne. Mais lorsqu'on relance le script alors qu'il a déjà créé des sous-dossiers ajouté précédemment, on obtient des messages d'erreur en rouge:
remote-item: impossible de trouver un paramètre correspondant au nom "*".
Au niveau de c:\oeron.ps1 : 30 caractère : 16
+ remote-item <<<< $dstfile.fullname "*"-recurse;
c:\temp\test\save\vnc suppression
Je pense donc que c'est ta ligne 30 "Remove-Item $dstFile.FullName "*" -Recurse;" qui pose soucis.

- la copie des fichiers se trouvant dans des sous-dossiers ne fonctionne pas.



Pour éviter tout malentendu, je copie ci-dessous ton script tel que je l'utilise:
Param ($src, $dst);

function Sync-Delete
{
Param ($src, $dst);

# boucle de suppression
# pour chacun des fichiers du répertoire de destination
foreach ($dstFile in Get-ChildItem $dst)
{
# nom complet du fichier à traiter
$srcFile = $src + $dstFile.Name;
if (Test-Path $srcFile)
{
# le fichier source existe
if ($dstFile.Mode.Contains("d"))
{
# on est sur un répertoire
# appel récursif
Sync-Delete $srcFile $dstFile.FullName;
}
}
else
{
# le fichier source n'existe pas
if ($dstFile.Mode.Contains("d"))
{
# on se trouve sur un répertoire
# effacer le répertoire et ses fichiers du répertoire de destination
Remove-Item $dstFile.FullName "*" -Recurse;
}
else
{
# on se trouve sur un fichier
# effacer le fichier du répertoire de destination
Remove-Item $dstFile.FullName;
}

Write-Host $dstFile.FullName " suppression" -ForegroundColor red
}
}
}

function Sync-Copy
{
Param ($src, $dst);

# boucle de copie
# pour chacun des fichiers du répertoire source
foreach ($srcFile in Get-ChildItem $src)
{
# nom complet du fichier de destination
$dstFile = $dst + $srcFile.Name;

if ($srcFile.Mode.Contains("d"))
{
# c'est un répertoire

if (-not (Test-Path $dstFile))
{
# le répertoire n'existe pas, le copier en entier
Copy-Item $srcFile.FullName $dst -Force;
}

# appel récursif
Sync-Copy $srcFile.FullName $dstFile;
continue;
}

if (Test-Path $dstFile)
{
# le fichier de destination existe déjà

if ($srcFile.LastWriteTime -gt (Get-Item $dstFile).LastWriteTime)
{
# le fichier source est plus récent que le fichier de destination -> l'écraser
Copy-Item $srcFile.FullName $dst -Force;
Write-Host $srcFile.FullName " mis-à-jour" -ForegroundColor yellow;
}
}
else
{
# le fichier de destination n'existe pas encore
Copy-Item $srcFile.FullName $dst -Force;
Write-Host $srcFile.FullName " nouveau fichier" -ForegroundColor green;
}
}
}

if (-not $src.EndsWith("\")) { $src += "\"; }
if (-not $dst.EndsWith("\")) { $dst += "\"; }

Sync-Delete $src $dst;
Sync-Copy $src $dst;
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Script de récupération de données
« Réponse #24 le: 19 février 2009 à 12:11:50 »
pas de soucis, je me rends bien compte que tu n'es pas habitué à ce genre de script
ouf, ça fonctionne donc pas trop mal :)

pour la ligne qui pose problème, essaye de la remplacer par
Remove-Item $dstFile.FullName;

j'essayerais jeter un œil ce soir pour l'autre problème
« Dernière modification: 19 février 2009 à 12:38:02 par O-ERON »
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #25 le: 19 février 2009 à 13:42:16 »
Merci pour ta énième réponse.

Pour ce qui est de ta suggestion pour remplacer la ligne 30, ça ne marche pas. Cette fois c'est même pire.
En effet, avant le répertoire était répliqué, mais pas son contenu.
Désormais, un fichier est créé à la racine de la réplique, un fichier du nom du sous-dossier sur la source, et sans extension. Il fait la taille de l'ensemble des fichiers présents dans le sous-dossier source.

A bientôt pour la suite des essais.
« Dernière modification: 19 février 2009 à 13:44:32 par Spip5 »
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #26 le: 20 février 2009 à 10:42:37 »
Nouvelles directives de la part de mon con de responsable qui, après m'avoir dit "débrouillez-vous", me donne de nouvelles indications précises.
Bref, c'est typique des chefs qui dans leur discours veulent des personnes autonomes mais qui ne leurs laissent pas en pratique les moyens de l'être.

On se fout du délai de 7 jours. On se fout de l'effacement de données.

Par contre, il faut que les données soient récupérés seulement une fois par semaine et que ce soit transparent pour les utilisateurs.

Je suis en colère évidemment, d'autant plus qu'O-eron a eu l'extrême gentillesse de commencer à se dépatouiller pour rien ou presque au final. Je m'excuse ici platement auprès de lui.

En pratique, un robocopy ou un xcopy fera l'affaire.  Seul soucis pour moi actuellement: faire en sorte que le script ne se lance qu'une fois par semaine. Quelqu'un aurait-il des pistes de réflexion à ce sujet.
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.

Hors ligne O-ERON

  • travailleur fou
  • Super modérateur
  • Grand Maître
  • *****
  • Messages: 4782
  • Karma: 0
  • Sexe: Homme
    • Codeweaver
Re : Script de récupération de données
« Réponse #27 le: 20 février 2009 à 10:58:05 »
mwarf pas de soucis, j'ai déjà eut ce genre de blague aussi
comprends pas trop comment ça fonctionnera correctement sans l'effacement des données mais soit

passer par le task schelduler permet de n'exécuter le script qu'une fois par semaine
[Sig removed by Admin: Total file size of all images in sig may not exceed 20 TB]

Hors ligne Obelix

  • Administrateur
  • Grand Maître
  • *****
  • Messages: 1426
  • Karma: 0
  • Sexe: Homme
    • Entre-aide
Re : Re : Script de récupération de données
« Réponse #28 le: 20 février 2009 à 10:59:55 »
On se fout du délai de 7 jours. On se fout de l'effacement de données.

Bonjour,

C'est complètement stupide comme raisonnement pourquoi laisser des données obsolètes sur un serveur de backup. Tu verras qu'a ce rythme même un hdd de 1 terra sera vite rempli d'inepties :)


Hors ligne Spip5

  • Grand Maître
  • *****
  • Messages: 1957
  • Karma: 1
  • Sexe: Homme
Re : Script de récupération de données
« Réponse #29 le: 21 février 2009 à 14:57:01 »
Merci pour vos réponses.

passer par le task schelduler permet de n'exécuter le script qu'une fois par semaine
Ok, bonne idée, sauf que les utilisateurs ne sont pas toujours relié au réseau. Du coup, s'ils sont hors-ligne il faut que j'ajoute un "si la tâche échoue, répéter toutes les 6h" par exemple. Quelqu'un aurait-il une piste en ce sens ?

Peut-on déployer des tâches planifiées par GPO ?

Citation de: Obelix
C'est complètement stupide comme raisonnement
Je suis tout à fait d'accord, c'est pourquoi je lui avais d'emblée annoncé que je chercherai le moyen de supprimer automatiquement les vieilles données.
Apparement, ça a mit du temps à lui remonter au cerveau jusqu'à ce qu'il arrive à me dire au bout de plusieurs semaines: "en fait: non."
Modérateur sur Tribu-Informatique, Espoir sur 6ma et Membre Passionné sur Vulgarisation-Informatique.