Name

Expand-ZipFile

SYNOPSIS

Extrait des fichiers et/ou des répertoires depuis une archive compressée au format Zip.

SYNTAX

Expand-ZipFile -Path <PSObject> [-OutputPath] <PSObject> [[-Query] <String>] [-From <String>] [-ExtractAction <ExtractExistingFileAction>] [-Password <String>] [-Encoding <Encoding>] [-ProgressID <Int32>] [-Flatten] [-Passthru] [-Create] [<CommonParameters>]

Expand-ZipFile -LiteralPath <PSObject> [-OutputPath] <PSObject> [[-Query] <String>] [-From <String>] [-ExtractAction <ExtractExistingFileAction>] [-Password <String>] [-Encoding <Encoding>] [-ProgressID <Int32>] [-Flatten] [-Passthru] [-Create] [<CommonParameters>]

DESCRIPTION

Extrait des fichiers et/ou des répertoires depuis une archive compressée .ZIP ou d'une archive auto extractible '.EXE'.

PARAMETERS

-Path <PSObject>

Nom du fichier Zip sous la forme d'un objet de type String ou System.IO.FileInfo. Dans le cas où c'est un type String et si celle-ci contient des jokers, alors la liaison retardée (delayed script block) sur le paramètre -OutputPath ne se déclenchera qu'une seule fois, et pas pour chaque nom d'entrée résolue. En revanche la liaison retardée sera déclenchée pour chaque objet reçu.

Required? True
Position? named
Default value  
Accept pipeline input? true (ByValue)
Accept wildcard characters? False

-OutputPath <PSObject>

Répertoire de destination utilisé lors de l'extraction des données contenues dans une archive Zip.

Ce paramètre peut utiliser la liaison retardée (delayed script block).

Required? True
Position? 0
Default value  
Accept pipeline input? true (ByPropertyName)
Accept wildcard characters? False

-Query <String>

Précise un critère de recherche pour les données à extraire de l'archive Zip. Pour plus d'informations sur l'écriture et la syntaxe de la requête, consultez le fichier d'aide about_Query_Selection_Criteria ou la documentation de la dll Ionic (fichier d'aide .chm).

Attention, il n’y a pas de contrôle de cohérence sur le contenu de la query, par exemple celle-ci 'size <100 byte AND Size>1000 byte' ne provoquera pas d'erreur, mais aucun fichier ne sera sélectionné. Si vous précisez également le paramètre -Passthru, une propriété personnalisée et nommée 'Query' sera ajoutée à l'objet renvoyé.

Required? False
Position? 1
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-From <String>

Précise le répertoire de l'archive à partir duquel seront extraites les entrées. Un nom de répertoire dans une archive a la syntaxe suivante : 'NomRépertoire/' ou 'NomRépertoire/NomDeSousRépertoire/'.

L'usage de ce paramètre nécessite de préciser le paramètre -Query, sinon une exception sera déclenchée.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-ExtractAction <ExtractExistingFileAction>

Précise le comportement à adopter lorsque des données sont déjà présentes dans le répertoire de destination.

Values : Throw, OverwriteSilently, DoNotOverwrite, InvokeExtractProgressEvent

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-Password <String>

Précise le mot de passe nécessaire à l'extraction d'une archive encryptée.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-Encoding <Encoding>

Type d'encodage de l'archive. Les valeurs possibles sont :

-ASCII           : encodage pour le jeu de caractères ASCII (7 bits).

-BigEndianUnicode : encodage pour le format UTF-16 qui utilise l'ordre d'octet avec primauté des octets de poids fort (big-endian).

-Default          : encodage pour la page de codes ANSI actuelle du système d'exploitation. -Unicode          : encodage pour le format UTF-16 avec primauté des octets de poids faible (little-endian).

-UTF32           : encodage pour le format UTF-32 avec primauté des octets de poids faible (little-endian). -UTF7           : encodage pour le format UTF-7.

-UTF8           : encodage pour le format UTF-8. . Pour une meilleure portabilité, l'utilisation de la valeur par défaut ('DefaultEncoding') est recommandé.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-ProgressID <Int32>

Lors de l'ouverture d'archive zip de grande taille, vous pouvez choisir d'afficher une barre de progression. L'usage de ce paramètre crée une barre de progression pour les opérations de lecture, celle-ci sera remplacée lors des opérations d'extraction. La barre de progression pour les opérations de lecture n'affiche que le nombre d'entrées lues.

Si le paramètre -Query est précisé, alors la barre de progression d'extraction affichera uniquement les noms des fichiers extraits, sinon elle affichera le nom et le pourcentage de la progression.

Note : bien évidement la durée de la présence de la barre de progression à l'écran dépendra du nombre d'entrées présentes dans l'archive.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-Flatten <SwitchParameter>

Les fichiers sont extraits sans arborescence.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-Passthru <SwitchParameter>

Emet le fichier d'archive dans le pipeline.

Attention, dans ce cas la libération des ressources par l'appel à la méthode Close() est à votre charge. L'objet archive renvoyé n'étant pas verrouillé, soyez également attentif à vos scénarios d'usage de cet objet.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-Create <SwitchParameter>

Crée le répertoire de destination si celui-ci n'existe pas.

Required? False
Position? named
Default value  
Accept pipeline input? false
Accept wildcard characters? False

-LiteralPath <PSObject>

Nom du fichier Zip sous la forme d'un objet de type String ou System.IO.FileInfo. Dans le cas où c'est un type String celui-ci ne doit pas contenir de jokers.

La liaison retardée (delayed script block) sur le paramètre -OutputPath ne se déclenchera qu'une seule fois. En revanche la liaison retardée sera déclenchée pour chaque objet reçu.

Required? True
Position? named
Default value  
Accept pipeline input? true (ByValue)
Accept wildcard characters? False

<CommonParameters>

This cmdlet supports the common parameters: Verbose, Debug,
ErrorAction, ErrorVariable, WarningAction, WarningVariable,
OutBuffer, PipelineVariable, and OutVariable.

For more information, see about_CommonParameters.

INPUTS

OUTPUTS

NOTES

Une archive Zip peut en théorie contenir plusieurs entrées dont chacune a un mode de compression et/ou de cryptage différent des autres.

Par contre, cette fonction suppose que le mot de passe est commun à toutes les entrées de l'archive, sinon une exception sera déclenchée lors du traitement du premier fichier possédant un mot de passe différent.

EXAMPLES

-------------- EXAMPLE 1 --------------

PS C:\> Expand-ZipFile -Path C:\Archive.zip -OutputPath C:\Temp\

Extrait les données contenues dans une archive Zip vers un répertoire de destination.

-------------- EXAMPLE 2 --------------

PS C:\> Expand-ZipFile -Path C:\Archive.zip -OutputPath C:\Temp\Archive -Create

Extrait les données d'une archive Zip dans un répertoire de destination. L'usage du paramètre -Create force la création du répertoire cible s'il n'existe pas.

-------------- EXAMPLE 3 --------------

PS C:\> Get-ChildItem D:\*.zip -recurse | 
 Expand-ZipFile C:\Temp\

Extrait les données contenues dans des archives Zip vers un répertoire de destination. Lors de l'extraction, la première collision de nom de fichier déclenchera une exception, car le paramètre -ErrorAction a par défaut la valeur 'Throw'.

-------------- EXAMPLE 4 --------------

PS C:\> Get-ChildItem D:\*.zip -recurse | 
 Expand-ZipFile C:\Temp\ -ExtractAction OverwriteSilently

Extrait les données contenues dans des archives Zip vers un répertoire de destination. Lors de l'extraction, l'usage de la valeur 'OverwriteSilently' pour le paramètre -ErrorAction déclenchera des erreurs simples lors des possibles collisions de noms de fichier.

-------------- EXAMPLE 5 --------------

PS C:\> Expand-ZipFile -Path C:\Archive.zip -OutputPath C:\Temp\ -Query 'name = *.jpg'

Extrait les données contenues dans une archive Zip vers un répertoire de destination. Seules les données correspondantes à la requête sont extraites, ici les fichiers dont l'extension est '.jpg'.

-------------- EXAMPLE 6 --------------

PS C:\> Expand-ZipFile -Path C:\Archive.zip -OutputPath C:\Temp\ -Query 'type = D'

Extrait les données contenues dans une archive Zip vers un répertoire de destination. Seules les données correspondantes à la requête sont extraites, ici uniquement les répertoires.

-------------- EXAMPLE 7 --------------

PS C:\> Expand-ZipFile -Path C:\Archive.zip -OutputPath C:\Temp\Test -Create -ProgressID 1

Extrait les données contenues dans une archive Zip vers un répertoire de destination. Le suivi de l'extraction est affiché dans une barre de progression.

-------------- EXAMPLE 8 --------------

PS C:\> 'C:\Temp\Archive.zip'|
Expand-ZipFile -OutputPath {"C:\Temp\TestZip\$($_.BaseName)"} -Create

Get-Childitem 'C:\Temp\Archive.zip'|
Expand-ZipFile -OutputPath {"C:\Temp\TestZip\$($_.BaseName)"} -Create -ExtractAction OverwriteSilently

La première ligne d'instruction extrait toutes les archives dans le nouveau répertoire C:\Temp\TestZip. Ici le delayed script block ou liaison retardée de script block, est déclenché une seule fois, car la fonction Expand-ZipFile ne reçoit qu'un seul objet.

De plus l'objet émit étant une chaîne de caractères et pas un fichier, fait que la propriété BaseName sur l'objet courant n'existe pas. Les chaînes de caractères représentant des fichiers, sont transformées en interne, bien après le déclenchement de la liaison retardée de script block.

La seconde ligne d'instruction extrait chaque archive dans un nouveau répertoire dont la racine sera C:\Temp\TestZip. Ici le delayed script block est déclenché plusieurs fois, car la fonction Expand-ZipFile reçoit plusieurs objets, tous de type fichier. Ainsi ces instructions créeront les répertoires 'C:\Temp\TestZip\Archive1','C:\Temp\TestZip\Archive2', 'C:\Temp\TestZip\ArchiveN'...

-------------- EXAMPLE 9 --------------

PS C:\> try {
$Splatting=@{
 Path='C:\Temp\Archive.zip'
 OutputPath='C:\Temp\ExtractArchive'
 Query='*.DLL' 
 From='Bin/V2/'
 Create=$True
 Flatten=$True 
 Passthru=$True              
}            
$ZipFile= Expand-ZipFile @Splatting
$ZipFile.Query
} finally {
 if ($ZipFile -ne $null )
 { $ZipFile.PSDispose() }
}

Cet exemple extrait tous les fichiers '.dll' contenu dans le répertoire 'Bin/V2/' de l'archive, dans le répertoire 'C:\Temp\ExtractArchive'.

Le paramètre -Flatten indique d'extraire tous les fichiers à la racine du répertoire indiqué, l'arborescence existante dans l'archive n'est pas recréé.

Le paramètre -Verbose affiche toutes les entrées lues, puis celles extraites.

Le paramètre -passthru récupère l'instance de l'archive, ce qui permet de continuer de travailler sur l'archive.

Une fois les traitements terminés, on libère explicitement l'instance de l'objet archive, ce qui déverrouillera le fichier.

RELATED LINKS

Last edited Mar 19, 2014 at 6:56 PM by LaurentDardenne, version 3

Comments

No comments yet.