Scenarios - CM-2203

Deploy ConfigMgr 2203 in a lab

<#
Deploy ConfigurationManager in a lab
#>
param
(
    # Lab Name
    [string]
    $LabName = 'cm2203',

    # Hypervisor to use
    [ValidateSet('Azure', 'HyperV')]
    [string]
    $Engine = 'HyperV',

    # Domain FQDn
    [string]
    $DomainName = 'contoso.com',

    # Path to SQL 2019, leave empty to auto-select
    [string]
    $SqlServerIsoPath,

    # Azure region, if used
    [string]
    $AzureRegionDisplayName = 'west europe',

    # Azure subscription name. Leave empty to use current subscription
    [string]
    $AzureSubscriptionName,

    # OS Name, refer to Get-LabAvailableOperatingSystem to select
    [string]
    $OSName = 'Windows Server 2022 Datacenter Evaluation (Desktop Experience)'
)

if ($Engine -eq 'Azure' -and -not $AzureSubscriptionName)
{
    Write-ScreenInfo -Type Warning -Message "No Azure subscription selected. Using '$($(Get-AzContext).Subscription.Name)'"
}

New-LabDefinition -Name $LabName -DefaultVirtualizationEngine $Engine

if ($Engine -eq 'Azure')
{
    Add-LabAzureSubscription -DefaultLocationName $AzureRegionDisplayName -SubscriptionName $AzureSubscriptionName
}

if (-not $SqlServerIsoPath)
{
    $iso = Get-ChildItem -File -Filter *SQL*2019* -Path "$(Get-LabSourcesLocation -Local)\ISOs"
    if (-not $iso)
    {
        Write-Error -Message 'No SQL server ISO available.'
        return
    }

    $SqlServerIsoPath = $iso.Fullname

    if ($Engine -eq 'Azure')
    {
        $SqlServerIsoPath = $SqlServerIsoPath.Replace((Get-LabSourcesLocation -Local), $labSources)
    }
}

Add-LabIsoImageDefinition -Path $SqlServerIsoPath -Name SQLServer2019
if ($Engine -eq 'Azure')
{
    Sync-LabAzureLabSources -Filter ([IO.Path]::GetFileName($SqlServerIsoPath)) -Verbose
}

Add-LabDomainDefinition -Name $DomainName -AdminUser install -AdminPassword Somepass1
Set-LabInstallationCredential -Username install -Password Somepass1

$PSDefaultParameterValues = @{
    'Add-LabMachineDefinition:Memory'          = 4GB
    'Add-LabMachineDefinition:OperatingSystem' = $OSName
    'Add-LabMachineDefinition:DomainName'      = $DomainName
}

Add-LabMachineDefinition -Name CMDC01 -Roles RootDC, CaRoot -OperatingSystem 'Windows Server 2022 Datacenter'

$dbRole = Get-LabMachineRoleDefinition -Role SQLServer2019 -Properties @{
    Collation = 'SQL_Latin1_General_CP1_CI_AS'
}
Add-LabMachineDefinition -Name CMDB01 -Roles $dbRole

<#
For possible Syntax, refer to Get-LabMachineRoleDefinition -Role ConfigurationManager -Syntax
Valid CM roles need to be passed as a single (!) comma-separated string in Roles property, for example:
 Get-LabMachineRoleDefinition -Role ConfigurationManager -Properties @{
    Roles = 'Reporting Services Point,Endpoint Protection Point'
}
Valid roles: None,Management Point,Distribution Point,Software Update Point,Reporting Services Point,Endpoint Protection Point
#>
$cmRole = Get-LabMachineRoleDefinition -Role ConfigurationManager -Properties @{
    Version = '2203'
}
Add-LabMachineDefinition -Name CMCM01 -Roles $cmRole

Install-Lab