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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 en jaune 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 :
1 2 | $zip_dr = $CONFIG_PATH+'perf.zip' dir $CONFIG_PATH'temp_'$DOCUMENT'\' -Recurse | Add-Zip $zip_dr |
Merci pour votre aide !