How to expand archive with PowerShell?

The PowerShell 5.0 has features to support ZIP archives – Expand-Archive and Compress-Archive. They are very handy but what about performance?

During deployment we have to extract a ZIP archive, and I wrote a simple PowerShell script to measure a performance two different ways to extract ZIP archive. The first method is using native PowerShell command Expand-Archive; the second method is using ExtractToDirectory method from System.IO.Compression.Filesystem.

$measureExpand = Measure-Command {
    $ProgressPreference=’SilentlyContinue’
    Expand-Archive $archivePath "$destinationFolder\TestExpand" -Force
}
$measureExpand


$measureExtract = Measure-Command { 
    Add-Type -assembly System.IO.Compression.Filesystem
    [io.compression.zipfile]::ExtractToDirectory($archivePath, "$destinationFolder\TestExtract")
 }

$measureExtract

The results are the following for around 90MB archive (10 tries).

  • First column – ZIP archive and destination folder are on the same disk
  • Second column – ZIP archive and destination folder are on different disks
  • With antivirus software, expand archive takes around 10 – 15 minutes
---
ExtractToDirectory 0:46
Expand-Archive     1:45
---
ExtractToDirectory 0:54
Expand-Archive     2:29
---
ExtractToDirectory 1:04
Expand-Archive     1:57
---
ExtractToDirectory 1:10
Expand-Archive     1:59
---
ExtractToDirectory 1:05
Expand-Archive     1:55
---
ExtractToDirectory 1:05
Expand-Archive     1:56
---
ExtractToDirectory 1:01
Expand-Archive     1:53
---
ExtractToDirectory 0:56
Expand-Archive     2:00
---
ExtractToDirectory 1:01
Expand-Archive     1:59
---
ExtractToDirectory 1:02
Expand-Archive     1:57
---
ExtractToDirectory 0:12
Expand-Archive     1:20
---
ExtractToDirectory 0:14
Expand-Archive     1:25
---
ExtractToDirectory 0:13
Expand-Archive     1:28
---
ExtractToDirectory 0:13
Expand-Archive     1:28
---
ExtractToDirectory 0:13
Expand-Archive     1:28
---
ExtractToDirectory 0:13
Expand-Archive     1:28
---
ExtractToDirectory 0:13
Expand-Archive     1:28
---
ExtractToDirectory 0:14
Expand-Archive     1:28
---
ExtractToDirectory 0:14
Expand-Archive     1:25
---
ExtractToDirectory 0:13
Expand-Archive     1:26

Conclusions

  • ExtractToDirectory is much faster then Expand-Archive
  • Antivirus software kills performance – it’s obvious, but we sometimes forget about things working in a background
  • Extract from/to the same disk drive is a bad idea

How can I reproduce your test?

Here is script used by me for performance tests.

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: