Private/Get-DomainJoinExtensionSettings.ps1

# Will be called in VM
function Global:Get-DomainJoinExtensionSettings {
    [CmdletBinding()]
    <#
    .SYNOPSIS
        ...
    .DESCRIPTION
        ...
    #>

    param(
        [Parameter(Mandatory = $true)]
        [string]
        $KeyVaultName
    )
    process {
        $adminUserName = (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name 'DomainAdminUsername').SecretValueText
        $adminUserPass = (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name 'DomainAdminPassword').SecretValueText
        $domainName = (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name 'DomainName').SecretValueText                    
        $adminUserName = "$domainName\$adminUserName"

        $settingsParameter = @{
            "Name"    = $domainName;
            "User"    = $adminUserName;
            "Restart" = "true";
            "Options" = 3;
            #"OUPath" = "OU=TEST,OU=My Computers,DC=yourdomain,DC=onmicrosoft,DC=com" # TODO: Check if needed
        }
    
        $protectedSettingsParameter = @{
            "Password" = $adminUserPass
        }
        #
        $settings = [pscustomobject]@{
            Publisher          = "Microsoft.Compute";
            Type               = "JsonADDomainExtension";
            TypeHandlerVersion = 1.3;
            Name               = "vmssjoindomain";            
            Settings           = $settingsParameter
            ProtectedSetting   = $protectedSettingsParameter;
        }
        $settings
    }
}