Freigeben über


Compress-Archive

Erstellt ein komprimiertes ZIP-Archiv aus angegebenen Dateien und Verzeichnissen.

Syntax

Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Beschreibung

Das Compress-Archive Cmdlet erstellt eine komprimierte oder komprimierte Archivdatei aus einer oder mehreren angegebenen Dateien oder Verzeichnissen. Ein Archiv verpackt mehrere Dateien mit optionaler Komprimierung in eine einzelne gezippte Datei, um die Verteilung und Speicherung zu vereinfachen. Eine Archivdatei kann mithilfe des durch den CompressionLevel-Parameter angegebenen Komprimierungsalgorithmus komprimiert werden.

Das Compress-Archive Cmdlet verwendet die System.IO.Compression.ZipArchive-API zum Komprimieren von Dateien. Die API beschränkt die maximale Dateigröße auf 2 GB. Die .NET-API arbeitet mit Dateien zusammen, die der offiziellen ZIP-Dateiformatspezifikation von PKWARE Inc. entsprechen. Weitere Informationen finden Sie unter System.IO.Compression.ZipArchive.

Hinweis

Das Compress-Archive Cmdlet ignoriert ausgeblendete Dateien und Ordner beim Erstellen oder Aktualisieren der Archivdatei. Auf Nicht-Windows-Computern enthält dies Dateien und Ordner mit dem Namen, der mit dem Punkt (.) Zeichen beginnt.

Um sicherzustellen, dass ausgeblendete Dateien und Ordner in das Archiv komprimiert werden, verwenden Sie stattdessen die .NET-API.

Einige Beispiele verwenden splatting, um die Zeilenlänge der Codebeispiele zu verringern. Weitere Informationen finden Sie unter about_Splatting.

Beispiele

Beispiel 1: Komprimieren von Dateien zum Erstellen einer Archivdatei

In diesem Beispiel werden Dateien aus verschiedenen Verzeichnissen komprimiert und eine Archivdatei erstellt. Ein Wildcard wird verwendet, um alle Dateien mit einer bestimmten Dateierweiterung abzurufen. In der Archivdatei gibt es keine Verzeichnisstruktur, da der Pfad nur Dateinamen angibt.

$compress = @{
  Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
  CompressionLevel = "Fastest"
  DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Der Path-Parameter akzeptiert bestimmte Dateinamen und Dateinamen mit Wildcards, *.vsd. Der Pfad verwendet eine durch Trennzeichen getrennte Liste, um Dateien aus verschiedenen Verzeichnissen abzurufen. Die Komprimierungsebene ist am schnellsten , um die Verarbeitungszeit zu reduzieren. Der Parameter DestinationPath gibt den Speicherort für die Draft.zip Datei an. Die Draft.zip Datei enthält Draftdoc.docx und alle Dateien mit einer .vsd Erweiterung.

Beispiel 2: Komprimieren von Dateien mit einem LiteralPath

In diesem Beispiel werden bestimmte benannte Dateien komprimiert und eine neue Archivdatei erstellt. In der Archivdatei gibt es keine Verzeichnisstruktur, da der Pfad nur Dateinamen angibt.

$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Absolute Pfad- und Dateinamen werden verwendet, da der LiteralPath-Parameter keine Wildcards akzeptiert. Der Pfad verwendet eine durch Trennzeichen getrennte Liste, um Dateien aus verschiedenen Verzeichnissen abzurufen. Die Komprimierungsebene ist am schnellsten , um die Verarbeitungszeit zu reduzieren. Der Parameter DestinationPath gibt den Speicherort für die Draft.zip Datei an. Die Draft.zip Datei enthält Draftdoc.docx und diagram2.vsd.

Beispiel 3: Komprimieren eines Verzeichnisses, das das Stammverzeichnis enthält

In diesem Beispiel wird ein Verzeichnis komprimiert und eine Archivdatei erstellt, die das Stammverzeichnis und alle zugehörigen Dateien und Unterverzeichnisse enthält . Die Archivdatei weist eine Verzeichnisstruktur auf, da der Pfad ein Stammverzeichnis angibt.

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archiveverwendet den Path-Parameter, um das Stammverzeichnis anzugeben. C:\Reference Der Parameter DestinationPath gibt den Speicherort für die Archivdatei an. Das Draft.zip Archiv enthält das Reference Stammverzeichnis und alle zugehörigen Dateien und Unterverzeichnisse.

Beispiel 4: Komprimieren eines Verzeichnisses, das das Stammverzeichnis ausschließt

In diesem Beispiel wird ein Verzeichnis komprimiert und eine Archivdatei erstellt, die das Stammverzeichnis ausschließt , da der Pfad ein Sternchen (*) verwendet. Das Archiv enthält eine Verzeichnisstruktur, die die Dateien und Unterverzeichnisse des Stammverzeichnisses enthält.

Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip

Compress-Archive verwendet den Path-Parameter , um das Stammverzeichnis C:\Reference mit einem Sternchen (*)-Wildcard anzugeben. Der Parameter DestinationPath gibt den Speicherort für die Archivdatei an. Das Draft.zip Archiv enthält die Dateien und Unterverzeichnisse des Stammverzeichnisses. Das Reference Stammverzeichnis wird aus dem Archiv ausgeschlossen.

Beispiel 5: Komprimieren nur der Dateien in einem Stammverzeichnis

In diesem Beispiel werden nur die Dateien in einem Stammverzeichnis komprimiert und eine Archivdatei erstellt. Es gibt keine Verzeichnisstruktur im Archiv, da nur Dateien komprimiert werden.

Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip

Compress-Archive verwendet den Path-Parameter , um das Stammverzeichnis C:\Reference mit einem Stern-Punkt-Stern (*.*) -Wildcard anzugeben. Der Parameter DestinationPath gibt den Speicherort für die Archivdatei an. Das Draft.zip Archiv enthält nur die Dateien des Reference Stammverzeichnisses, und das Stammverzeichnis ist ausgeschlossen.

Beispiel 6: Verwenden der Pipeline zum Archivieren von Dateien

In diesem Beispiel werden Dateien an die Pipeline gesendet, um ein Archiv zu erstellen. In der Archivdatei gibt es keine Verzeichnisstruktur, da der Pfad nur Dateinamen angibt.

Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
  Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip

Get-ChildItem verwendet den Parameter "Path ", um zwei Dateien aus verschiedenen Verzeichnissen anzugeben. Jede Datei wird durch ein FileInfo-Objekt dargestellt und wird an die Pipeline gesendet.Compress-Archive Die beiden angegebenen Dateien werden archiviert in PipelineFiles.zip.

Beispiel 7: Verwenden der Pipeline zum Archivieren eines Verzeichnisses

In diesem Beispiel wird ein Verzeichnis an die Pipeline gesendet, um ein Archiv zu erstellen. Dateien werden als FileInfo-Objekte und Verzeichnisse als DirectoryInfo-Objekte gesendet. Die Verzeichnisstruktur des Archivs enthält nicht das Stammverzeichnis, die Dateien und Unterverzeichnisse sind jedoch im Archiv enthalten.

Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip

Get-ChildItem verwendet den Parameter "Path ", um das C:\LogFiles Stammverzeichnis anzugeben. Jedes FileInfo - und DirectoryInfo-Objekt wird an die Pipeline gesendet.

Compress-Archive fügt jedes Objekt zum PipelineDir.zip Archiv hinzu. Der Path-Parameter wird nicht angegeben, da die Pipelineobjekte an Parameterposition 0 empfangen werden.

Beispiel 8: Wie rekursion sich auf Archive auswirken kann

In diesem Beispiel wird gezeigt, wie rekursion Dateien in Ihrem Archiv duplizieren kann. Beispiel: Wenn Sie den Recurse-Parameter verwendenGet-ChildItem. Bei rekursionsprozessen wird jedes FileInfo - und DirectoryInfo-Objekt an die Pipeline gesendet und dem Archiv hinzugefügt.

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

Das C:\TestLog Verzeichnis enthält keine Dateien. Es enthält ein Unterverzeichnis mit dem Namen testsub , das die testlog.txt Datei enthält.

Get-ChildItemverwendet den Path-Parameter, um das Stammverzeichnis anzugeben. C:\TestLog Der Recurse-Parameter verarbeitet die Dateien und Verzeichnisse. Ein DirectoryInfo-Objekt wird für testsub und ein FileInfo-Objekt testlog.txterstellt.

Jedes Objekt wird an die Pipeline gesendet.Compress-Archive Der DestinationPath gibt den Speicherort für die Archivdatei an. Der Path-Parameter wird nicht angegeben, da die Pipelineobjekte an Parameterposition 0 empfangen werden.

Die folgende Zusammenfassung beschreibt den Inhalt des Archivs, der PipelineRecurse.zip eine duplizierte Datei enthält:

  • Das DirectoryInfo -Objekt erstellt das testsub Verzeichnis und enthält die testlog.txt Datei, die die ursprüngliche Verzeichnisstruktur widerspiegelt.
  • Das FileInfo-Objekt erstellt ein Duplikat testlog.txt im Stammverzeichnis des Archivs. Die duplizierte Datei wird erstellt, da rekursion ein Dateiobjekt an Compress-Archive. Dieses Verhalten wird erwartet, da jedes Objekt, das die Pipeline gesendet hat, dem Archiv hinzugefügt wird.

Beispiel 9: Aktualisieren einer vorhandenen Archivdatei

In diesem Beispiel wird eine vorhandene Archivdatei Draft.zipim C:\Archives Verzeichnis aktualisiert. In diesem Beispiel enthält die vorhandene Archivdatei das Stammverzeichnis sowie die zugehörigen Dateien und Unterverzeichnisse.

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

Der Befehl wird mit neueren Versionen vorhandener Dateien im C:\Reference Verzeichnis und seinen Unterverzeichnissen aktualisiertDraft.zip. Außerdem werden neue Dateien, die bzw C:\Reference . deren Unterverzeichnisse hinzugefügt wurden, im aktualisierten Draft.zip Archiv enthalten.

Parameter

-CompressionLevel

Gibt an, wie viel Komprimierung angewendet werden soll, wenn Sie die Archivdatei erstellen. Eine schnellere Komprimierung erfordert weniger Zeit zum Erstellen der Datei, kann aber zu größeren Dateigrößen führen.

Wenn dieser Parameter nicht angegeben ist, verwendet der Befehl den Standardwert Optimal.

Im Folgenden sind die zulässigen Werte für diesen Parameter aufgeführt:

  • Am schnellsten. Verwenden Sie die schnellste Komprimierungsmethode, die verfügbar ist, um die Verarbeitungszeit zu reduzieren. Eine schnellere Komprimierung kann zu größeren Dateigrößen führen.
  • NoCompression. Komprimiert die Quelldateien nicht.
  • Optimal. Die Verarbeitungszeit hängt von der Dateigröße ab.
Typ:String
Zulässige Werte:Optimal, NoCompression, Fastest
Position:Named
Standardwert:Optimal
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Confirm

Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.

Typ:SwitchParameter
Aliase:cf
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-DestinationPath

Dieser Parameter ist erforderlich und gibt den Pfad zur Archivausgabedatei an. Der DestinationPath sollte den Namen der gezippten Datei und entweder den absoluten oder relativen Pfad zur zippten Datei enthalten.

Wenn der Dateiname in DestinationPath keine .zip Dateinamenerweiterung hat, fügt das Cmdlet die .zip Dateinamenerweiterung hinzu.

Typ:String
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Force

Verwenden Sie diesen Parameter, um eine vorhandene Archivdatei zu überschreiben.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LiteralPath

Gibt den Pfad oder Pfad zu den Dateien an, die Sie der zippten Archivdatei hinzufügen möchten. Im Gegensatz zum Path-Parameter wird der Wert von LiteralPath genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie jedes Escapezeichen in einfache Anführungszeichen ein, um PowerShell anzuweisen, keine Zeichen als Escapesequenzen zu interpretieren. Verwenden Sie Kommas, um mehrere Pfade anzugeben und Dateien an mehreren Speicherorten in die zippede Ausgabedatei einzuschließen.

Typ:String[]
Aliase:PSPath
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-PassThru

Bewirkt, dass das Cmdlet ein Dateiobjekt ausgibt, das die erstellte Archivdatei darstellt.

Dieser Parameter wurde in PowerShell 6.0 eingeführt.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Path

Gibt den Pfad oder Pfad zu den Dateien an, die Sie der zippten Archivdatei hinzufügen möchten. Um mehrere Pfade anzugeben und Dateien an mehreren Speicherorten einzuschließen, verwenden Sie Kommas, um die Pfade zu trennen.

Dieser Parameter akzeptiert Wildcardzeichen. Mit Wildcardzeichen können Sie alle Dateien in einem Verzeichnis zu Ihrer Archivdatei hinzufügen.

Die Verwendung von Wildcards mit einem Stammverzeichnis wirkt sich auf den Inhalt des Archivs aus:

  • Um ein Archiv zu erstellen, das das Stammverzeichnis und alle zugehörigen Dateien und Unterverzeichnisse enthält , geben Sie das Stammverzeichnis im Pfad ohne Wildcards an. Beispiel: -Path C:\Reference
  • Wenn Sie ein Archiv erstellen möchten, das das Stammverzeichnis ausschließt , aber alle zugehörigen Dateien und Unterverzeichnisse zippt, verwenden Sie den Stern (*)-Wildcard. Beispiel: -Path C:\Reference\*
  • Um ein Archiv zu erstellen, das nur die Dateien im Stammverzeichnis zippt, verwenden Sie den Stern-Punkt-Stern (*.*) -Wildcard. Unterverzeichnisse des Stammverzeichnisses sind nicht im Archiv enthalten. Beispiel: -Path C:\Reference\*.*
Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

-Update

Aktualisiert das angegebene Archiv, indem ältere Dateiversionen im Archiv durch neuere Dateiversionen mit denselben Namen ersetzt werden. Sie können diesen Parameter auch hinzufügen, um Dateien zu einem vorhandenen Archiv hinzuzufügen.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Typ:SwitchParameter
Aliase:wi
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

String

Sie können eine Zeichenfolge senden, die einen Pfad zu einer oder mehreren Dateien enthält.

Ausgaben

None

Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.

FileInfo

Wenn Sie den PassThru-Parameter verwenden, gibt dieses Cmdlet ein FileInfo-Objekt zurück.

Hinweise

Mithilfe von Rekursion und Senden von Objekten in der Pipeline können Dateien in Ihrem Archiv dupliziert werden. Wenn Sie z. B. den Parameter Recurse verwendenGet-ChildItem, wird jedes FileInfo- und DirectoryInfo-Objekt, das an die Pipeline gesendet wird, dem Archiv hinzugefügt.

Das Compress-Archive Cmdlet verwendet UTF-8-Codierung. Andere ZIP-Archivtools können ein anderes Codierungsschema verwenden. Beim Extrahieren von Dateien mit Dateinamen, die nicht mit UTF-8-Codierung gespeichert sind, Expand-Archive wird der im Archiv gefundene Rohwert verwendet. Dies kann zu einem Dateinamen führen, der sich von dem im Archiv gespeicherten Quelldateinamen unterscheidet.