Public/Functions/split/New-CAB.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<#
.LINK https://www.osdeploy.com/ .SYNOPSIS Creates a CAB file from a Directory .DESCRIPTION Creates a CAB file from a Directory .PARAMETER SourceDirectory Directory to create the CAB from .EXAMPLE New-CAB -SourceDirectory C:\DeploymentShare\OSDeploy\OSConfig Creates LZX High Compression CAB from of C:\DeploymentShare\OSDeploy\OSConfig Saves file in Parent Directory C:\DeploymentShare\OSDeploy\OSConfig.cab .NOTES NAME: New-CAB.ps1 AUTHOR: David Segura, david@segura.org BLOG: http://www.osdeploy.com VERSION: 18.9.4 #> function New-CAB { [CmdletBinding()] Param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$SourceDirectory ) BEGIN {} PROCESS { #================================================= Write-Verbose "Processing '$SourceDirectory' ..." #================================================= $ArchiveBaseName = (Get-Item $SourceDirectory).Name $ArchiveFileName = "$ArchiveBaseName.cab" $FolderFullName = (Get-Item $SourceDirectory).Fullname $DestinationFolder = (Get-Item $SourceDirectory).Parent.FullName $ArchiveFullName = Join-Path -Path $DestinationFolder -ChildPath $ArchiveFileName #================================================= Write-Verbose "Generating MakeCAB DDF ..." #================================================= $DirectiveString = [System.Text.StringBuilder]::new() [void]$DirectiveString.AppendLine(';*** MakeCAB Directive file;') [void]$DirectiveString.AppendLine('.OPTION EXPLICIT') [void]$DirectiveString.AppendLine(".Set CabinetNameTemplate=$ArchiveFileName") [void]$DirectiveString.AppendLine(".Set DiskDirectory1=$DestinationFolder") [void]$DirectiveString.AppendLine('.Set Cabinet=ON') [void]$DirectiveString.AppendLine('.Set Compress=ON') [void]$DirectiveString.AppendLine('.Set CompressionType=LZX') [void]$DirectiveString.AppendLine('.Set CabinetFileCountThreshold=0') [void]$DirectiveString.AppendLine('.Set FolderFileCountThreshold=0') [void]$DirectiveString.AppendLine('.Set FolderSizeThreshold=0') [void]$DirectiveString.AppendLine('.Set MaxCabinetSize=0') [void]$DirectiveString.AppendLine('.Set MaxDiskFileCount=0') [void]$DirectiveString.AppendLine('.Set MaxDiskSize=0') #================================================= Write-Verbose "Unblocking Files ..." #================================================= Get-ChildItem $FolderFullName -Recurse | Unblock-File #================================================= Write-Verbose "Adding DDF Content ..." #================================================= $DirectivePath = Join-Path -Path $DestinationFolder -ChildPath "$ArchiveBaseName.ddf" Get-ChildItem -Recurse $SourceDirectory | Where-Object { -Not($_.psiscontainer)} | Select-Object -ExpandProperty Fullname | Foreach-Object { [void]$DirectiveString.AppendLine("""$_"" ""$($_.SubString($FolderFullName.Length + 1))""") } #================================================= Write-Verbose "Compressing '$FolderFullName' to '$ArchiveFullName' ..." #================================================= $DirectiveString.ToString() | Out-File -FilePath $DirectivePath -Encoding UTF8 -Width 2000 -Force makecab /F $DirectivePath } END { #================================================= Write-Verbose "Complete" #================================================= } } |