Question
Compression de fichiers avec nom particulier
- PatriceLT
- Auteur du sujet
- Visiteur
-
Je souhaiterai avoir de l'aide sur quelque chose en particulier, j'ai vu plusieurs messages concernant ce type de demande, mais aucune ne fonctionne pour ma part, du moins de ce que j'en attend.
Voici ce que je fais :
- Script permettant l'extract de donnée depuis des serveurs SQL depuis powershell et ce, en tâche planifiée.
Ce qui est fait :
- A partir d'un fichier de paramètre en .csv, de fichiers .sql dans des dossiers spécifiques, je fais une connexion en base de donnée, j'exécute les requêtes qui sont dans mes fichiers .sql (avec des noms particuliers) et j'en extrait les tables dans un fichier de sortie .csv
Ce que je dois faire :
- Permettre à certains fichiers .csv avec un nom particulier de pouvoir être zippé à la fin de mon compte, donc une fois que tous mes fichiers .csv ont été généré dans le dossier cible, et donc que toutes mes requêtes sql ont été faites (les requêtes peuvent durer un certain temps, et donc, les fichiers .csv générés ne se font qu'après que les requêtes soient terminées.
- Il faudrait donc que je puisse faire en sorte, une fois tous les fichiers présents dans le dossier, récupérer que certains fichiers dans ce dossier avec un nom bien spécifique.
Ce que j'ai déjà essayé de faire :
Faire un Get-ChildItem dans mon dossier, avec en exclusion les *.zip, et de compresser, via une fonction déjà présente sur ce forum, qui est la Compress-ToZip (lien www.powershell-scripting.com/index.php?o...id=259&Itemid=71 )
Cependant, il fait de la copie de fichier presque en direct, et demande une action si les fichiers sont déjà présent dans l'archive.
Il faut donc au final, que j'ai une fonction qui gère la compression, l'exclusion des archives .zip déjà présentes, ainsi qu'attendre que tous les fichiers .csv soit générés sans action manuelle.
Avez-vous ça en stock ?
Une piste peut être ?
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
PatriceLT écrit:
Peux-tu reformuler ce que tu dois faire ?Une piste peut être ?
Par exemple, j'ai un peu de mal avec ceci :
As-tu une archive par fichier concerné ou une seule archive pour tous les fichiers ?- Permettre à certains fichiers .csv avec un nom particulier de pouvoir être zippé à la fin de mon compte,
Tu crées une archive a chaque exécution ou tu complètes une archive existante ?
Je te déconseille la fonction que tu utilises.
Regarde ceci , précises nous l'OS cible et la version de Powershell installée.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
Désolé pour cette confusion, le \"à la fin de mon compte\" était en trop.
Pour répondre à tes questions :
As-tu une archive par fichier concerné ou une seule archive pour tous les fichiers ?
J'ai actuellement une archive générée chaque jour qui se fait automatiquement via une tâche planifiée (car tout est fait en tâche planifié), du coup cela se base à la fois sur le nom de certains de mes fichiers .csv et en même temps sur la date. Donc pour être plus précis, une archive générée chaque jour.
Tu crées une archive a chaque exécution ou tu complètes une archive existante ?
Je dois créer une archive chaque jour :
Archive_23042018.zip contenant toto_23042018.csv + titi_23042018.csv
Archive_24042018.zip contenant toto_24042018.csv + titi_24042018.csv
J'ai en sortie du coup (via mes requêtes .sql), plusieurs fichiers .csv dont celles qui doivent être ajouté dans l'archive.
toto.sql génère toto_23042018.csv
titi.sql génère titi_23042018.csv
tata.sql génère tata_23042018.csv
tralala.sql génère tralala_23042018.csv
Au final, 5 requêtes sql qui génère 5 fichiers csv de sortie, 2 de ces 5 fichiers doivent être compressé chaque jour automatiquement sans action humaine.
Si besoin je pourrai fournir mon code, ou il ne me manque que le fichier x_date.zip contenant les 2 ou X fichiers x_date.csv
J'ai d'autres contraintes, aucune interaction.
Aucune possibilité de changer la version Powershell cliente qui est actuellement en version 2 et donc impossible d'ajouter quelque module powershell que ce soit. Impossible de modifier l'OS Server, qui est, actuellement en 2012 ou 2012 R2.
J'ai donc regardé ton lien, et ne peux du coup, pas rajouté de .psm1 qui est pour sa part un module n'étant pas intégré nativement à powershell. Si ce n'est pas possible dans la version actuelle de powershell, je pourrai éventuellement essayer d'en savoir plus mais pour l'instant, aucun ajout n'est possible.
En faite, le script que je suis en train de faire, est une adaptation pour faire ce que fais actuellement un script .vbs avec un .cmd lui étant attaché. Je ne fais donc en powershell, que les actions de ces 2 fichiers afin de traiter les mêmes données, et donc d'avoir le même résultat (reporting) au final
Merci en tout cas pour ton aide, en espérant que mes explications soient un peu plus clair.
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Je connais, l'ascension par la face Nord est difficileJ'ai d'autres contraintes, aucune interaction.
Aucune possibilité de changer la version Powershell cliente qui est actuellement en version 2 et donc impossible d'ajouter quelque module powershell que ce soit.
PatriceLT écrit:
Oui, très.en espérant que mes explications soient un peu plus clair.
La fonction de compression citée utilise en interne un objet COM qui peut parfois poser pb, c'est pour cela que je la déconseille. Donc à part utiliser un prg d'archive existant sur le serveur ou une dll dotnet je ne vois pas de solution, mais Google en a peut être.
Par contre le fait que le fichier existe déjà dans ton archive, si elle est créée chaque jour, me semble être un bug dans ton code, à vérifier. Et sinon je ne comprend pas trop ce comportement.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
Merci pour ta réponse, actuellement, les scripts vbs font appels a 7zip via l'exe avec des options qui permet une compression, est-ce très optimisé, je ne sais pas.
Je vais au cas ou mettre la totalité de mon code, afin de voir si il n'y aurait pas des bugs dans celui ci, comme tu me l'as indiqué. Peut être pour la phase de compression il y aura une solution, du moins je l'espère, car d'après ce que j'ai appris, cette compression va servir, une fois la compression de certains des fichiers évoqués faite, un autre serveur viens les récupérer.
Je te met mon code ce soir afin de te donner plus de détails.
Et peut être il pourra servir à d'autres.
Cdt.
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Au vue des choix laissés à ta disposition je te dirais ouiMerci pour ta réponse, actuellement, les scripts vbs font appels a 7zip via l'exe avec des options qui permet une compression, est-ce très optimisé, je ne sais pas.
Je préfère nettement cet approche que le CopyHere.
Je regarderais le code dés que je peux
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Compression de fichiers avec nom particulier