Compress-7Zip.ps1
Function Compress-7Zip { <# .SYNOPSIS Create a compressed archive of a file or folder .DESCRIPTION Use Compress-7Zip to create a 7z, gzip, zip, bzip2 or tar archive. .EXAMPLE Compress-7Zip c:\scripts Create archive.zip in the current working folder of the folder c:\scripts .EXAMPLE Compress-7Zip "computer inventory.csv" -OutputFile "inventory.gz" -ArchiveType GZIP -Remove $True Create a gzip archive of a single file and delete the uncompressed file .EXAMPLE Get-ChildItem E:\test | Where {$_.LastWriteTime -lt (Get-Date).AddDays(-5)} | Select -First 1 | Compress-7Zip Create an archive in c:\folder based on pipeline input .PARAMETER FullName The full path of the file or folder you would like turn into a compressed archive. .PARAMETER OutputFile The full path of the file to be created. Defaults to archive.zip in current working directory. .PARAMETER ArchiveType The type of archive you would like. Valid types 7Z, GZIP, ZIP, BZIP2, TAR. .PARAMETER Remove If $True this will remove the uncompressed version of the file or folder only leaving the compressed archive. #> [CmdletBinding()] Param( [Parameter(Mandatory=$True,Position=1,ValueFromPipelineByPropertyName=$True)] [ValidateScript({Test-Path $_})] [string]$FullName, [string]$OutputFile, [ValidateSet("7Z","GZIP","ZIP","BZIP2","TAR")] [string]$ArchiveType, [bool]$Remove ) Begin { If($PSBoundParameters.ContainsKey('ArchiveType')) { If ($ArchiveType -eq "7Z") { $7zaArchiveType = "-t7z" $ArchiveExt = ".7z" } ElseIf ($ArchiveType -eq "GZIP") { $7zaArchiveType = "-tgzip" $ArchiveExt = ".gz" } ElseIf ($ArchiveType -eq "ZIP") { $7zaArchiveType = "-tzip" $ArchiveExt = ".zip" } ElseIf ($ArchiveType -eq "BZIP2") { $7zaArchiveType = "-tbzip2" $ArchiveExt = ".bzip2" } ElseIf ($ArchiveType -eq "TAR") { $7zaArchiveType = "-ttar" $ArchiveExt = ".tar" } } Else { $7zaArchiveType = "-tzip" $ArchiveExt = ".zip" } If(!($PSBoundParameters.ContainsKey('OutputFile'))) { $OutputFile = ".\archive" + $ArchiveExt } } Process { Write-Verbose "Creating compressed archive file" & "$7zaBinary" a "$7zaArchiveType" "$OutputFile" "$FullName" If($PSBoundParameters.ContainsKey('Remove')) { If ($Remove -eq $True) { Write-Verbose "Removing original files/folders" Remove-Item $FullName -Force } } } } |