Private/Scriptblocks.ps1

$installD365Module = {
    try {
        Stop-Transcript | out-null
    }
    catch {
        $error.clear()   
    }
    New-Item -ItemType Directory -Force -Path C:\Install\Log -ErrorAction SilentlyContinue | Out-Null
    Start-Transcript -Path "C:\Install\Log\InstallD365Module.$(get-date -format yyyyMMddhhmmss).log"
    if (Get-Module -Name SetupD365Environment -ListAvailable) {
        Update-Module -Name SetupD365Environment -Force
    }
    else {
        Install-Module -Name SetupD365Environment -Force
    }
    Stop-Transcript
}

$initializeVm = {
    $ErrorActionPreference = "SilentlyContinue"
    try {
        Stop-Transcript | out-null
    }
    catch {
        $error.clear()
    }
    New-Item -ItemType Directory -Force -Path C:\Install\Log -ErrorAction SilentlyContinue | Out-Null
    Start-Transcript -Path "C:\Install\Log\InitVM.$(get-date -format yyyyMMddhhmmss).log"
    Import-Module -Name SetupD365Environment
    if (Get-Module -Name Cloud.Ready.Software.NAV -ListAvailable) {
        Update-Module -Name Cloud.Ready.Software.NAV -Force
    }
    else {
        Install-Module -Name Cloud.Ready.Software.NAV -Force
    }
    Initialize-CustomAzVm
    Stop-Transcript
}

$downloadBCDVD = {
    Param(
        [Parameter(Mandatory = $false, Position = 3)]
        [string]
        $Version,
        [Parameter(Mandatory = $false, Position = 4)]
        [string]
        $CumulativeUpdate,
        [Parameter(Mandatory = $false, Position = 5)]
        [string]
        $Language
    )
    try {
        Stop-Transcript | out-null
    }
    catch {
        $error.clear()
    }
    Start-Transcript -Path "C:\Install\Log\DownloadBC.$(get-date -format yyyyMMddhhmmss).log"
    Import-Module SetupD365Environment
    Write-Host "Version: $Version CU: $CumulativeUpdate Lang: $Language..."
    Receive-BusinessCentralDVD -Version $Version -CumulativeUpdate $CumulativeUpdate -Language $Language
    Stop-Transcript
}

$installBC = {
    Param(
        [Parameter(Mandatory = $false, Position = 1)]
        [string]
        $DownloadDirectory,
        [Parameter(Mandatory = $false, Position = 2)]
        [string]
        $ConfigurationFile,
        [Parameter(Mandatory = $false, Position = 3)]
        [string]
        $LicenseFilename
    )
    try {
        Stop-Transcript | out-null
    }
    catch {
        $error.clear()
    }    
    Start-Transcript -Path "C:\Install\Log\InstallBC.$(get-date -format yyyyMMddhhmmss).log"
    # TODO: Remove later >>
    Update-Module -Name SetupD365Environment -Force
    # TODO <<
    Import-Module SetupD365Environment
    Write-Host "Installing Business Central"    
    $InstallArgs = @{        
      }
    if (-not([string]::IsNullOrEmpty($DownloadDirectory))){
        $InstallArgs.Add('DownloadDirectory',$DownloadDirectory)
    }
    if (-not([string]::IsNullOrEmpty($ConfigurationFile))){
        $InstallArgs.Add('ConfigurationFile',$ConfigurationFile)
    }
    if (-not([string]::IsNullOrEmpty($LicenseFilename))){
        $InstallArgs.Add('LicenseFilename',$LicenseFilename)
    }
    Install-BusinessCentral @InstallArgs
    
    # Set default Service to disabled
    Get-Service | Where-Object {$_.Name -like 'MicrosoftDynamicsNavServer*'} | Set-Service -StartupType Disabled
    Get-Service | Where-Object {$_.Name -like 'MicrosoftDynamicsNavServer*'} | Stop-Service
    Stop-Transcript
}

$generalizeVM = {
    try {
        Stop-Transcript | out-null
    }
    catch {
        $error.clear()
    }    
    Start-Transcript -Path "C:\Install\Log\GeneralizeVM.$(get-date -format yyyyMMddhhmmss).log"
    Write-Host "Generalizing VM. "
    Write-Host "About to call 'Sysprep.exe /generalize /oobe /shutdown /quiet'"
    Stop-Transcript
    $sysprep = 'C:\Windows\System32\Sysprep\Sysprep.exe'
    $arg = '/generalize /oobe /shutdown /quiet'
    Start-Process -FilePath $sysprep -ArgumentList $arg    
}