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

Create ISO of Cumulative Update with PowerShell – Get VersionInfo

$
0
0

Build_icon

This step is once again part of a bigger whole: turning your download of a Cumulative Update (CU) into an ISO image. In order to do that, I want to automate as much as possible: also the name and characteristics of the file that I’m creating. In order to do that, there is already a bunch of information that is in the naming convention that Microsoft applies to these Cumulative Updates. Remember my previous post, where I was unzipping the CU. Apparently, Microsoft puts the DVD in a zip-file, with a very specific naming convention, like “NAV.8.0.39663.BE.DVD.zip”, or “Product.majorversion.minorversion.build.country.DVD.zip”. This is interesting and useful information. So I decided to a new function that returns an object with this information. The function is called “Get-NAVCumulativeUpdateDownloadVersionInfo“. Yeah, I know, quite a long name .. I wanted to be really specific ;-).

Here is the function:

function Get-NAVCumulativeUpdateDownloadVersionInfo
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)]
        [String] $SourcePath

    )

    Begin
    {
    }
    Process
    {
        $SourcePathZip = [io.path]::ChangeExtension($SourcePath,'zip')
        Rename-Item $SourcePath $SourcePathZip
        $helper = New-Object -ComObject Shell.Application
        $files = $helper.NameSpace($SourcePathZip).Items()
        $filename = ($files | where name -like '*zip').name

        $filename = [io.path]::GetFileNameWithoutExtension($filename)
        
        if ($SourcePath -ne $SourcePathZip) {
            Rename-Item $SourcePathZip $SourcePath
        }

        $regex = '(?<product>\w+?)\.(?<version>\d+?\.\d+?)\.(?<build>\d+?)\.(?<country>\w+?)\.DVD'
        $MatchedRegEx = [regex]::Match($filename, $regex)
        if (-not $MatchedRegEx.Success) {
            Write-Error "$filename in $SourcePath does not match the required format to be decompiled into versioninfo."
            break
        }
        $VersionInfo = New-Object System.Object
        $VersionInfo | Add-Member -MemberType NoteProperty -Name Product -Value $MatchedRegEx.Groups.Item('product').value
        $VersionInfo | Add-Member -MemberType NoteProperty -Name Version -Value $MatchedRegEx.Groups.Item('version').value
        $VersionInfo | Add-Member -MemberType NoteProperty -Name Build -Value $MatchedRegEx.Groups.Item('build').value
        $VersionInfo | Add-Member -MemberType NoteProperty -Name Country -Value $MatchedRegEx.Groups.Item('country').value
        $VersionInfo | Add-Member -MemberType NoteProperty -Name FullVersionString -Value $filename
    }
    End
    {
        $VersionInfo
    }
}

 

Basically, it’s going to search for the zip-file in the exe-file, and with regular expressions, it’s going to get the different tags out of it (thanks, Vjeko, for helping me with the regex :-)). Next, I build a simple object of it, and return it.
Second step in turning my download into an ISO is DONE! Up to the last step!


Viewing all articles
Browse latest Browse all 60373

Trending Articles