IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Zip de fichier et CopyHere [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut Zip de fichier et CopyHere
    Bonjour,

    Dans le cadre d'un projet, je dois utiliser Powershell (pas le choix de la techno) pour manipuler des fichiers. Pour faire court, je dois récupérer une archive (zip), la désarchiver, modifier des XML puis réarchiver le tout sous un nouveau nom.

    N'étant pas du tout expert en Powershell, je me suis débrouillé tant bien que mal et mon truc fonctionne plutôt pas mal. Pour réarchiver mes fichier, j'utilise une fonction toute trouvée sur divers sites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function Add-Zip
    {
        param([string]$zipfilename)
    
        $shellApplication = new-object -com shell.application
        $zipPackage = $shellApplication.NameSpace($zipfilename)
    
        foreach($file in $input) {
                $extn = [IO.Path]::GetExtension($file)
    
                if ($extn -eq ".twb" -Or $extn -eq ".tde") {
                    $zipPackage.CopyHere($file.FullName)
                    Start-sleep -milliseconds 10000
                }
        }
    }
    La ligne Start-sleep -milliseconds 10000 est de moi. Et je n'en suis pas fier. J'ai beau ne pas être développeur de formation, je me rends bien compte que c'est moche. Si j'ai mis cette pause de 10 secondes dans mon script, c'est parce que les fichiers que je dois zipper sont parfois assez volumineux (environ 20 Mo), ce qui fait que mon script continue sa vie alors que les fichiers ne sont pas encore archivé. Forcément, ça plante. Tant qu'il n'y a que des petits fichiers, ça ne pose pas de problème.

    Mais évidemment, attendre 10 secondes à chaque fichier à zipper, sachant que j'en ai un certain nombre et que seuls quelques uns sont volumineux, c'est nul. Au final mon script est beaucoup trop long.

    Je me dis que le mieux serait de récupérer et tester un retour de mon ```$zipPackage.CopyHere($file.FullName)```, mais je n'y parviens pas. Et c'est du coup là que j'aurais besoin d'un œil avisé.

    Toute autre idée pour optimiser le bousin et éviter ce sleep de 10 seconde m'irait aussi, bien sûr.

    Pour finir, j'utilise la fonction Add-zip de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $zip_dr = $CONFIG_PATH+'perf.zip'
    dir $CONFIG_PATH'temp_'$DOCUMENT'\' -Recurse | Add-Zip $zip_dr
    Merci pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Pourquoi ne pas utiliser la classe ZipFile du Framework pour décompresser ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Eh bien parce que je ne connaissais pas ! Et ça fonctionne super bien ! J'ai pu m'affranchir complètement de ma fonction foireuse avec ces quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Add-Type -assembly "system.io.compression.filesystem"
    $source_zip = $CONFIG_PATH+'temp_'+$DOCUMENT
    $destination_zip = $CONFIG_PATH+$reader.item("NOM_SORTIE_DOCUMENT")+'.zip'
    [io.compression.zipfile]::CreateFromDirectory($source_zip, $destination_zip)
    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MemoryStream / FileStream et zip de fichiers.
    Par Pikooz dans le forum C#
    Réponses: 3
    Dernier message: 07/02/2008, 11h45
  2. Script PERL pour l'archivage/purge/zip de fichiers
    Par jfmerveille dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2007, 12h52
  3. Probleme de Zip des fichiers
    Par lephyrexian dans le forum VBScript
    Réponses: 25
    Dernier message: 16/01/2007, 10h46
  4. Probleme de Zip des fichiers
    Par lephyrexian dans le forum VBScript
    Réponses: 16
    Dernier message: 15/12/2006, 10h17
  5. [VB6]zip et fichier de 0Ko
    Par riesseg dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 29/05/2006, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo