How to unzip a file in Powershell?
Solution 1:
In PowerShell v5+, there is an Expand-Archive command (as well as Compress-Archive) built in:
Expand-Archive c:\a.zip -DestinationPath c:\a
Solution 2:
Here is a simple way using ExtractToDirectory from System.IO.Compression.ZipFile:
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
Unzip "C:\a.zip" "C:\a"
Note that if the target folder doesn't exist, ExtractToDirectory will create it. Other caveats:
- Existing files will not be overwritten and instead trigger an IOException.
- This method requires at least .NET Framework 4.5, available for Windows Vista and newer.
- Relative paths are not resolved based on the current working directory, see Why don't .NET objects in PowerShell use the current directory?
See also:
- How to Compress and Extract files (Microsoft Docs)
Solution 3:
In PowerShell v5.1 this is slightly different compared to v5. According to MS documentation, it has to have a -Path
parameter to specify the archive file path.
Expand-Archive -Path Draft.Zip -DestinationPath C:\Reference
Or else, this can be an actual path:
Expand-Archive -Path c:\Download\Draft.Zip -DestinationPath C:\Reference
Expand-Archive Doc