Releases: santisq/PSCompression
v3.1.0
What's Changed
New Features & Enhancements
-
Native Zip Entry Objects
Zip entries returned by
Get-ZipEntry(and created byNew-ZipEntry) are now backed directly byICSharpCode.SharpZipLib.Zip.ZipEntry.
This exposes additional useful properties onZipEntryBasederived objects:IsEncrypted(bool) – Indicates whether the entry is encrypted.AESKeySize(int) – AES key size (0, 128, 192, or 256) if AES encryption is used.CompressionMethod(ICSharpCode.SharpZipLib.Zip.CompressionMethod) – The actual compression method used.Comment(string) – The entry comment.Crc(long) – Cyclic redundancy check.
-
Support for Encrypted Zip Entries
Get-ZipEntryContentandExpand-ZipEntrynow fully support reading and extracting password-protected entries.
A new common parameter has been added to both cmdlets:-Password <SecureString>
- If an entry is encrypted and no password is provided, the cmdlets will securely prompt for one.
- Examples and detailed guidance for handling encrypted entries have been added to the help documentation.
-
Documentation Improvements
All cmdlet help files have been reviewed and updated for consistency and clarity.
Significant enhancements toGet-ZipEntryContentandExpand-ZipEntryhelp:- Added dedicated examples demonstrating password-protected entry handling.
- Updated parameter descriptions and notes for the new
-Passwordparameter. - Improved phrasing, removed outdated example output, and ensured uniform formatting across the module.
Full Changelog: v3.0.1...v3.1.0
v3.0.1
What's Changed
- Acknowledge .NET limitation when appending to existing
ZipArchiveby @santisq in #44. - Added
AssemblyLoadContextsupport for PowerShell 7 (.NET 8.0 or later) to resolve DLL hell by isolating module dependencies. PowerShell 5.1 (.NET Framework) users can't get around this issue due to lack ofAssemblyLoadContextin that runtime. See #45 and #46 for details.
Full Changelog: v3.0.0...v3.0.1
v3.0.0
What's Changed
-
Added commands supporting several algorithms to compress and decompress strings:
ConvertFrom-BrotliString&ConvertTo-BrotliString(using to BrotliSharpLib)ConvertFrom-DeflateString&ConvertTo-DeflateString(from CLR)ConvertFrom-ZlibString&ConvertTo-ZlibString(custom implementation)
-
Added commands for
.tarentry management with a reduced set of operations compared tozipentry management:Get-TarEntry: Lists entries, serving as the main entry point forTarEntrycmdlets.Get-TarEntryContent: Retrieves the content of a tar entry.Expand-TarEntry: Extracts a tar entry to a file.
-
Added commands to compress files and folders into
.tararchives and extract.tararchives with various compression algorithms:Compress-TarArchive&Expand-TarArchive: Supported compression algorithms includegz,bz2,zst,lz, andnone(no compression).
-
Removed commands:
-
Compress-GzipArchive&Expand-GzipArchive: These were deprecated as they only supported single-file compression, which is now better handled by the module’s.tararchive functionality. For a workaround to compress or decompress single files using gzip, see Example 2 inConvertTo-GzipString, which demonstrates using:[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path)) | ConvertFrom-GzipString
-
This update was made possible by the following projects. If you find them helpful, please consider starring their repositories:
Full Changelog: v2.1.0...v3.0.0
v2.1.0
What's Changed
-
Code improvements.
-
Instance methods
.OpenRead()and.OpenWrite()moved fromZipEntryFiletoZipEntryBase. -
Adds support to operate from input Stream. This means you can now:
-
List entries:
PS ..\PSCompression> $uri = 'https://www.powershellgallery.com/api/v2/package/PSCompression' PS ..\PSCompression> Invoke-WebRequest $uri | Get-ZipEntry | Select-Object -First 5 Directory: / Type LastWriteTime CompressedSize Size Name ---- ------------- -------------- ---- ---- Archive 11/6/2024 10:29 PM 227.00 B 785.00 B [Content_Types].xml Archive 11/6/2024 10:27 PM 516.00 B 2.50 KB PSCompression.Format.ps1xml Archive 11/6/2024 10:29 PM 598.00 B 1.58 KB PSCompression.nuspec Archive 11/6/2024 10:27 PM 1.66 KB 5.45 KB PSCompression.psd1 Directory: /_rels/ Type LastWriteTime CompressedSize Size Name ---- ------------- -------------- ---- ---- Archive 11/6/2024 10:29 PM 276.00 B 507.00 B .rels
-
Read their content:
PS ..\PSCompression> $entry = Invoke-WebRequest $uri | Get-ZipEntry -Include *.psd1 PS ..\PSCompression> $entry | Get-ZipEntryContent -Raw | Invoke-Expression Name Value ---- ----- FunctionsToExport {} PowerShellVersion 5.1 GUID c63aa90e-ae64-4ae1-b1c8-456e0d13967e FormatsToProcess {PSCompression.Format.ps1xml} RootModule bin/netstandard2.0/PSCompression.dll Author Santiago Squarzon ModuleVersion 2.0.10 CompanyName Unknown PrivateData {[PSData, System.Collections.Hashtable]} Description Zip and GZip utilities for PowerShell! Copyright (c) Santiago Squarzon. All rights reserved. CmdletsToExport {Get-ZipEntry, Get-ZipEntryContent, Set-ZipEntryContent, Remove-ZipEntry…} VariablesToExport {} AliasesToExport {gziptofile, gzipfromfile, gziptostring, gzipfromstring…} RequiredAssemblies {System.IO.Compression, System.IO.Compression.FileSystem}
-
Extract them:
PS ..\PSCompression> $file = $entry | Expand-ZipEntry -PassThru PS ..\PSCompression> $file Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 11/6/2024 10:27 PM 5584 PSCompression.psd1 PS ..\PSCompression> Get-Content $file.FullName -TotalCount 3 # # Module manifest for module 'PSCompression' #
Other operations are not supported and will throw an error:
PS ..\PSCompression> $entry | Remove-ZipEntry Remove-ZipEntry: The operation is not supported for entries created from input Stream.
-
Full Changelog: v2.0.10...v2.1.0
v2.0.10
What's Changed
- Fix
EncodingTransformationforEncodingandintinstances wrapped inPSObjectby @santisq in #37. Same issue as #34 but whenEncodingandintinstances are wrapped inPSObject:
$utf8 = [System.Text.Encoding]::UTF8 | Write-Output
Get-ZipEntry .\test.zip | Get-ZipEntryContent -Encoding $utf8
# Get-ZipEntryContent: Cannot process argument transformation on parameter 'Encoding'.
# Could not convert input 'System.Text.UTF8Encoding+UTF8EncodingSealed' to a valid Encoding object.
$utf8 = [System.Text.Encoding]::UTF8.CodePage | Write-Output
Get-ZipEntry .\test.zip | Get-ZipEntryContent -Encoding $utf8
# Get-ZipEntryContent: Cannot process argument transformation on parameter 'Encoding'.
# Could not convert input '65001' to a valid Encoding object.Full Changelog: v2.0.9...v2.0.10
v2.0.9
What's Changed
$utf8 = Write-Output utf8
Get-ZipEntry .\test.zip | Get-ZipEntryContent -Encoding $utf8
# Get-ZipEntryContent: Cannot process argument transformation on parameter 'Encoding'.
# Could not convert input 'utf8' to a valid Encoding object.Full Changelog: v2.0.8...v2.0.9
v2.0.8
What's Changed
New-ZipEntry- Use file's.FullNameif no-EntryPathis provided by @santisq in #33:- Makes
-EntryPathno longer Mandatory onFileParameterSet. When no-EntryPathis specified the cmdlet will use the-SourcePathin it's normalized form. - Added Pester tests and updated docs to reflect this change.
- Updated all docs Syntax section to properly reflect Mandatory parameters.
- Makes
Full Changelog: v2.0.7...v2.0.8
v2.0.7
What's Changed
-
Adds
-ExcludeParameter toCompress-ZipArchiveby @santisq in #31. This parameter allows to exclude items from source. For example, if you wanted to compress thepathfolder excluding any file having the.xyzextension and any folder namedtest(including all its child items), you could do:Compress-ZipArchive .\path -Destination myPath.zip -Exclude *.xyz, *\test\*
Full Changelog: v2.0.6...v2.0.7
v2.0.6
What's Changed
- Fixed parameter names in
Compress-ZipArchivedocumentation by @martincostello in #25 - Update to CI pipeline to use
codecov-action@v4 - Fixed
coverletsupport for Linux runner tests
New Contributors
- @martincostello made their first contribution in #25
Full Changelog: v2.0.5...v2.0.6