May 11, 2017 at 7:57 am
Hello,
as I struggled all day today to find out how to zip folders using Powershell I decided to post my solution, just in case anyone has any problems using Google as a source. The latter provides tons of solutions, but very often snippets and incomplete instructions. Overall I visited probably around 20-30 web pages.I won't mention MS documentation, so much confusion in names, version, compatibility, etc. So here is what you need:
1) It's best to install .net 4.5 (or something above 4.0) using the full version. You probably need to search for the file NDP452-KB2901907-x86-x64-AllOS-ENU.exe
2) Upgrade Powershell from 2.0 to 3.0 - this is actually part of the Windows Management Framework 4.0, download here:
https://www.microsoft.com/en-us/download/details.aspx?id=40855
Make sure you read the System Requirements.
3) Write the PS script that will accept 2 parameters, 1) input folder to be zipped 2) result .zip file:
# ========================================================================================================
# Script : pc_compress.ps1
# Descr. : Zip script for Powershell
# Author : Richlion2
# Date : 11/05/2017
#
# Prereq.: this script will zip some files. For this to work you may need .Net 4.5.2 and Powershell 3.0,
# found under Windows Management Framework 4.0
#
# [System.IO.Compression.ZipFile]::CreateFromDirectory($cdir , $cdest , 0 , $false)
# $cdir is the directory you want to zip.
# $cdest is the name of the zipfile you want to create.
# $Compressionlevel can be set to Optimal, Fastest or NoCompression. => use 0
# $includeBaseDir can be $true or $false.
# ========================================================================================================
Param(
[string]$cdir,
[string]$cdest
)
# Adds a Microsoft .NET Framework type (a class) to a Windows PowerShell session.
Add-Type -assembly "system.io.compression"
Add-Type -assembly "system.io.compression.filesystem"
# To use .NET for zipping you first need to load the class assembly:
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")
# Make sure you don't create the ZIP file inside the folder being zipped, you will get
# this message:
# "The process cannot access the file 'c:\adm\adm.zip' because it is being used by another process."
# Delete the old zip file first
Remove-Item $cdest -force
[System.IO.Compression.ZipFile]::CreateFromDirectory($cdir , $cdest , 0 , $false)
4) Call your script directly from a CMD window or write a command prompt script:
@echo off
c:
cd \adm
powershell -ExecutionPolicy Bypass -command "& c:\adm\ps_compress.ps1 c:\adm\ c:\temp\adm.zip"
REM Or
REM powershell -ExecutionPolicy Bypass -command "& c:\adm\ps_compress.ps1 -cdir c:\adm\ -cdest c:\temp\adm.zip"
This will zip c:\adm into c:\temp\adm.zip
I hope this helps.
Richard
Viewing post 1 (of 1 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy