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:\Reference
anzugeben. 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-Archive
gesendet.
Die beiden angegebenen Dateien werden in PipelineFiles.zip
archiviert.
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:\TestLog
anzugeben. Der Recurse Parameter verarbeitet die Dateien und Verzeichnisse. Ein DirectoryInfo-Objekt wird für testsub
und ein FileInfo--Objekt testlog.txt
erstellt.
Jedes Objekt wird an Compress-Archive
die 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 dietestlog.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 anCompress-Archive
gesendet 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.zip
im 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
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.
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.