Public/Functions/General/New-CabDevelopment.ps1

function New-CabDevelopment
{
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$True)]
        [string]$Path,
        [System.Management.Automation.SwitchParameter]$LZXHighCompression,
        [System.Management.Automation.SwitchParameter]$MakeCABsFromSubDirs
    )
    
    If ($LZXHighCompression) {
        $Compress = ".Set CompressionType=LZX"
    } Else { 
        $Compress = ".Set CompressionType=MSZIP"
    }
    
    If ($MakeCABsFromSubDirs) {
        Get-ChildItem -Directory -Path $Path | ForEach ($_) {
        PSMakeCAB $_.FullName }
    } Else {
        PSMakeCAB $Path
    }

}

function PSMakeCAB($Path)
{
    #Set the CAB File Name
    $CabFileName = (Get-Item $Path).Name
    $CabFileNameExt = (Get-Item $Path).Name + ".cab"
    
    #Set the Destination Directory
    $DestinationDir = (Get-Item $Path).Parent.FullName
    
    Write-Host "Creating " $DestinationDir\$CabFileNameExt
    
    $ddf = ";*** MakeCAB Directive file;
.OPTION EXPLICIT
.Set CabinetNameTemplate=$CabFileNameExt
.Set DiskDirectory1=$DestinationDir
.Set Cabinet=on
.Set Compress=on
$Compress
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
"

    $PathFullName = (Get-Item $Path).fullname
    #Remove Streams
    Get-ChildItem $PathFullName -Recurse | Unblock-File
    $ddfpath = ($DestinationDir+"\$CabFileName.ddf")
    $ddf += (ls -recurse $Path | ? {!$_.psiscontainer}|select -expand fullname|%{'"'+$_+'" "'+$_.SubString($PathFullName.length+1)+'"'}) -join "`r`n"
    $ddf
    $ddf | Out-File -encoding UTF8 $ddfpath -Width 2000 -Force
    makecab /F $ddfpath
    #rm $ddfpath
    #rm setup.inf
    #rm setup.rpt
}