Compress-Archive Not Working?

Copper Contributor

I'm running Powershell version 5.1.17763.4974 on a server with Windows Server 2019 Datacenter v10.

Been using PS for years but trying Compress-Archive for the first time.

Tried building a script which didn't work.  When executing the script, it immediately goes right back to the PS prompt and nothing happens.

Trying to execute a simple command directly with something like this: 

Compress-Archive -Path 'D:\abc\*.*'  -DestinationPath 'D:\xyz\'

Same thing happens.  Goes immediately back to the PS prompt.

I'm running PS as administrator.

What am I missing?


4 Replies



Hi, John.


Have a look at examples four and five, as you've specified the format (i.e. *.*) that explicitly only adds files from d:\abc. Subfolders and files from those subfolders will not be added.


If there's files in d:\abc then something would appear to be wrong. If there's no files but there are subfolders then what you're observing is expected behaviour, and you should change *.* simply to *, as per example four.



Also note that Compress-Archive has limitations - when compared to the underlying .NET class upon which it's based, which I spoke to in another thread:





Thank you @LainRobertson 

I had read through that article and completely missed the obvious answer:
This: Compress-Archive -Path 'D:\abc\' -DestinationPath 'D:\xyz\'
Instead of this: Compress-Archive -Path 'D:\abc\*.*' -DestinationPath 'D:\xyz\'

Is working perfectly.
In fact, the folder D:\abc is indeed empty, but there are multiple folders on the next level.


If I may, I have two more questions.
I believe I read somewhere that using this compression method is limited to 2gb file sizes?
Is there a way to remove files from a compressed file leaving everything else in tact?

Thanks again for your quick answer and that excellent article!




Hey, John.


Yes, you certainly can manipulate an archive, however, you have to do so from .NET. Here's a very basic example, which you can easily extend as it's a pretty simple set of classes to work with.



# Add the required .NET library reference.
Add-Type -AssemblyName "System.IO.Compression.FileSystem";

# Open the Zip file.
$Archive = [System.IO.Compression.ZipFile]::Open("<full path to your Zip file>", [System.IO.Compression.ZipArchiveMode]::Update);

# Delete the first entry.

# Finish up properly by disposing the $Archive object.


In a real-world context, you'd most likely enumerate the Entries collection and make smarter decisions based on file size, type, etc.






Thanks again for all you help @LainRobertson 

Hope you have a wonderful weekend!