Freigeben über


Compress-Archive

Erstellt ein komprimiertes Archiv oder zippierte Datei 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 Cmdlet Compress-Archive 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 Komprimierungsalgorithmus komprimiert werden, der durch den parameter CompressionLevel angegeben wird.

Das cmdlet Compress-Archive verwendet die System.IO.Compression.ZipArchive-API zum Komprimieren von Dateien. Die API beschränkt die maximale Dateigröße auf 2 GB. Weitere Informationen finden Sie unter System.IO.Compression.ZipArchive.

Anmerkung

Das Cmdlet Compress-Archive ignoriert ausgeblendete Dateien und Ordner beim Erstellen oder Aktualisieren der Archivdatei. Auf Nicht-Windows-Computern umfasst 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 Path nur Dateinamen angibt.

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

Der parameter Path akzeptiert bestimmte Dateinamen und Dateinamen mit Wildcards, *.vsd. Der Path verwendet eine durch Trennzeichen getrennte Liste, um Dateien aus verschiedenen Verzeichnissen abzurufen. Die Komprimierungsebene ist schnellste, 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 Path 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 Path verwendet eine durch Trennzeichen getrennte Liste, um Dateien aus verschiedenen Verzeichnissen abzurufen. Die Komprimierungsebene ist schnellste, um die Verarbeitungszeit zu reduzieren. Der parameter DestinationPath gibt den Speicherort für die Draft.zip Datei an. Die Draft.zip Datei enthält nur 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 stammverzeichnis sowie alle zugehörigen Dateien und Unterverzeichnisse enthält. Die Archivdatei weist eine Verzeichnisstruktur auf, da der Path ein Stammverzeichnis angibt.

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

Compress-Archive verwendet den Parameter Path, um das Stammverzeichnis C:\Referenceanzugeben. Der parameter DestinationPath gibt den Speicherort für die Archivdatei an. Das Draft.zip Archiv enthält das Reference Stammverzeichnis sowie 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 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 Parameter Path, um das Stammverzeichnis anzugeben, C:\Reference mit einem Sternchen (*) 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 Parameter Path, um das Stammverzeichnis anzugeben, C:\Reference mit einem Sternpunkt-Stern- (*.*) -Wildcard. 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 wird 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 Path 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 an Compress-Archivegesendet. Die beiden angegebenen Dateien werden in PipelineFiles.ziparchiviert.

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--Objekts wird an die Pipeline gesendet.

Compress-Archive fügt jedes Objekt dem PipelineDir.zip Archiv hinzu. Der Path-Parameter ist 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. Wenn Sie z. B. Get-ChildItem mit dem Parameter Recurse verwenden. 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 verzeichnis C:\TestLog enthält keine Dateien. Es enthält ein Unterverzeichnis mit dem Namen testsub, das die testlog.txt Datei enthält.

Get-ChildItem verwendet den Parameter Path, um das Stammverzeichnis C:\TestLoganzugeben. 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 Compress-Archivedie Pipeline gesendet. Der DestinationPath- gibt den Speicherort für die Archivdatei an. Der Path-Parameter ist nicht angegeben, da die Pipelineobjekte an Parameterposition 0 empfangen werden.

In der folgenden Zusammenfassung werden die Inhalte des PipelineRecurse.zip Archivs beschrieben, die eine duplizierte Datei enthalten:

  • 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 dupliziertes testlog.txt im Stammverzeichnis des Archivs. Die duplizierte Datei wird erstellt, da rekursion ein Dateiobjekt an Compress-Archivegesendet hat. 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 verzeichnis C:\Archives 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 aktualisiert Draft.zip mit neueren Versionen vorhandener Dateien im C:\Reference Verzeichnis und seinen Unterverzeichnissen. Und neue Dateien, die C:\Reference oder den Unterverzeichnissen hinzugefügt wurden, werden in das aktualisierte Draft.zip Archiv aufgenommen.

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:

  • schnellste. 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.
  • Optimale. 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

Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.

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. Die 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 aufweist, 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 LiteralPath- genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Wildcards 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 stammverzeichnis und alle zugehörigen Dateien und Unterverzeichnisse enthält, geben Sie das Stammverzeichnis im Path ohne Wildcards an. Beispiel: -Path C:\Reference
  • Um ein Archiv zu erstellen, das Stammverzeichnis ausschließt, aber alle zugehörigen Dateien und Unterverzeichnisse zippt, verwenden Sie das Sternchen (*) -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 passiert, 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. Get-ChildItem mit dem parameter Recurse verwenden, wird jedes FileInfo- und DirectoryInfo-Objekt, das an die Pipeline gesendet wird, dem Archiv hinzugefügt.

Das Cmdlet Compress-Archive 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, verwendet Expand-Archive den im Archiv gefundenen Rohwert. Dies kann zu einem Dateinamen führen, der sich von dem im Archiv gespeicherten Quelldateinamen unterscheidet.