Quantcast
Channel: Microsoft Dynamics 365 Community
Viewing all articles
Browse latest Browse all 64797

Create ISO of Cumulative Update with PowerShell – Unzip

$
0
0

 This post is about the first “step” we need, regarding transforming a download of a cumulative update to an useful ISO file. This step handles on Unzipping the download, and putting it in some kind of destination folder.

When you download a CU, it looks something like this:


A self-extractable ZIP-file which contains:

  • a folder “APPLICATION”
  • and yet another ZIP file in the form of “NAV.8.0.39663.BE.DVD.zip”, which is the file we’re going to be interested in for eventually creating our ISO.

Our job for this part:

  • First, unzipping the exe-file
  • next, unzipping the zip of the DVD and removing the zip file (as this is not necessary anymore).

I created the function “Unzip-NAVCumulativeUpdateDownload“:

function Unzip-NAVCumulativeUpdateDownload
{
    [CmdletBinding()]
    Param
    (
        # The full source-filepath of the file that should be unzipped
        [Parameter(Mandatory=$true)] 
        $SourcePath,

        # The full Destionation-path where it should be unzipped
        [String] $DestinationPath
    )
    Process
    {       
        #rename exe to zip to be able to unzip it
        
        $SourcePathZip = [io.path]::ChangeExtension($SourcePath,'zip')
        Rename-Item $SourcePath $SourcePathZip | Out-Null
        Unzip-Item -SourcePath $SourcePathZip -DestinationPath $DestinationPath | Out-Null

        if ($SourcePath -ne $SourcePathZip) {
            Rename-Item $SourcePathZip $SourcePath | Out-Null
        }

        $ProductDVD = Get-ChildItem -Path $DestinationPath -Filter '*.zip'
        if ($ProductDVD){
            $SourcePath2 = $ProductDVD.FullName
            $DestinationPath2 = (join-path $ProductDVD.Directory ($ProductDVD.Name -replace '.zip',''))

            Unzip-Item -SourcePath $SourcePath2 -DestinationPath $DestinationPath2 | Out-Null
        } else
        {
            Write-Error 'Unknown file structure'
            break
        }
        Remove-Item -Path $SourcePath2 -Force | Out-Null
    }
    end
    {
        $DestinationPath2
    }
}

 

The function expects the format as described above, and is very simply going to:

  • Rename the exe to zip
  • Unzip the first zip
  • Search for the DVD-zip
  • Unzip that one as well
  • Remove the DVD-zip

And all in the end, it’s returning the DVD-folder, which I’m going to be interested in for turning into an ISO later on.

Now, to make this “Unzip” work, I need one other function: Unzip-Item, which expects a parameter being a zip-file, and a destination folder. There are multiple ways how to do it, and I found my solution online (though, can’t remember exactly the resource – my apologies for that). Here it is:

function Unzip-Item
{
    [CmdletBinding()]
    Param
    (
        # The full source-filepath of the file that should be unzipped
        [Parameter(Mandatory=$true, 
                   ValueFromPipelineByPropertyName=$true)]
        [Alias("Fullname")] 
        $SourcePath,

        # The full Destionation-path where it should be unzipped
        [String]
        $DestinationPath
    )
    process
    {
        if (-not (Test-Path $DestinationPath)){New-Item -Path $DestinationPath -ItemType directory}
        Unblock-File $DestinationPath 
        $helper = New-Object -ComObject Shell.Application
        $files = $helper.NameSpace($SourcePath).Items()
        $helper.NameSpace($DestinationPath).CopyHere($files) | Out-Null
    }
}

There you go .. you should now be able to already unzip your Cumulative Update with PowerShell. Up to the next step!


Viewing all articles
Browse latest Browse all 64797

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>