# bulkUnzipFiles.ps1
# This script will take a directory of zip files, unzip them to individual folders, and delete the source zip files
# Contains error handling and logging
# Will fail if source files contain square bracekts
$SourceFileLocation="E:\source\*"
$DestinationFileLocation="e:\destination\"
$ErrorLogfile=[System.IO.Path]::GetTempFileName()
$listOfFiles=get-childitem $SourceFileLocation -Include *.zip
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
Foreach ($file in $listOfFiles)
{
$UnzipErrorMessage=$NULL
$DeleteErrorMessage=$NULL
$DestinationFolder=$DestinationFileLocation+$File.Basename
write-host $file.fullname -----> $DestinationFolder
try
{
Unzip $file.fullname $DestinationFolder -erroraction stop
}
Catch
{
$UnzipErrorMessage=$_.Exception.Message
Write-host $UnzipErrorMessage+"`r`n" | Out-File -FilePath $ErrorLogfile -Append
$file.fullname+" threw "+$UnzipErrorMessage | Out-File -FilePath $ErrorLogfile -Append
}
if (-Not $UnzipErrorMessage)
{
try
{
write-host Deleting $file.fullname
# Remove-item $file.fullname -erroraction stop -whatif
Remove-item $file.fullname -erroraction stop
}
Catch
{
$DeleteErrorMessage=$_.Exception.Message
Write-Host $DeleteErrorMessage
$file.fullname+" threw "+$DeleteErrorMessage | Out-File -FilePath $ErrorLogfile -Append
}
}
}
$ErrorLogfile=Get-ChildItem $ErrorLogfile
If ($ErrorLogFile.length -ne 0)
{
write-error "Errors were encountered. Error log is here: $ErrorLogFile`r`n"
get-content $ErrorLogfile
}
else
{
remove-item -path $ErrorLogfile
}
# references
# https://stackoverflow.com/questions/27768303/how-to-unzip-a-file-in-powershell
# http://anonit.net/create-a-zip-file-on-powershell/
Comments