private/WinPEDrivers/CoreWinPEDriver/Expand-CoreWinPEDriverZip.ps1

#Requires -PSEdition Core

function Expand-CoreWinPEDriverZip {
    <#
    .SYNOPSIS
        Extracts the contents of a .zip file.
 
    .DESCRIPTION
        Internal helper that wraps Expand-Archive to extract zip files.
        Returns the destination directory on success.
 
    .PARAMETER Path
        Full path to the .zip file.
 
    .PARAMETER DestinationPath
        Directory where contents will be extracted.
 
    .PARAMETER Force
        Overwrite existing files in the destination.
 
    .OUTPUTS
        [System.IO.DirectoryInfo] The extraction destination directory.
    #>

    [CmdletBinding()]
    [OutputType([System.IO.DirectoryInfo])]
    param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$DestinationPath,

        [Parameter()]
        [switch]$Force
    )

    if (-not (Test-Path -Path $Path)) {
        $PSCmdlet.ThrowTerminatingError(
            [System.Management.Automation.ErrorRecord]::new(
                [System.IO.FileNotFoundException]::new("Zip file not found: $Path"),
                'ZipFileNotFound',
                [System.Management.Automation.ErrorCategory]::ObjectNotFound,
                $Path
            )
        )
    }

    if (-not (Test-Path -Path $DestinationPath)) {
        New-Item -ItemType Directory -Path $DestinationPath -Force | Out-Null
    }

    Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] Extracting zip: $Path -> $DestinationPath"

    $expandParams = @{
        Path            = $Path
        DestinationPath = $DestinationPath
        ErrorAction     = 'Stop'
    }
    if ($Force) {
        $expandParams['Force'] = $true
    }

    Expand-Archive @expandParams

    Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] Zip extraction complete: $DestinationPath"
    Get-Item -Path $DestinationPath
}