functions/get-d365defaultmodelfornewprojects.ps1


<#
    .SYNOPSIS
        Get the default model used creating new projects in Visual Studio
         
    .DESCRIPTION
        Get the registered default model that is used across all new projects that are created inside Visual Studio when working with D365FO project types
         
    .EXAMPLE
        PS C:\> Get-D365DefaultModelForNewProjects
         
        This will display the current default module registered in the "DynamicsDevConfig.xml" file.
        Located in Documents\Visual Studio Dynamics 365\ or in Documents\Visual Studio 2015\Settings\ depending on the version.
         
    .NOTES
        Tag: Model, Models, Development, Default Model, Module, Project
         
        Author: Mötz Jensen (@Splaxi)
         
        The work for this cmdlet / function was inspired by Robin Kretzschmar (@DarkSmile92) blog post about changing the default model.
         
        The direct link for his blog post is: https://robscode.onl/d365-set-default-model-for-new-projects/
         
        His main blog can found here: https://robscode.onl/
         
#>


function Get-D365DefaultModelForNewProjects {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
    [CmdletBinding()]
    param ()

    $filePath = "$env:UserProfile\Documents\Visual Studio Dynamics 365\DynamicsDevConfig.xml"
    if (-not (Test-PathExists -Path $filePath -Type Leaf)) {
        $filePath = "$env:UserProfile\Documents\Visual Studio 2015\Settings\DynamicsDevConfig.xml"
    }
    if (-not (Test-PathExists -Path $filePath -Type Leaf)) { return }

    if (Test-PSFFunctionInterrupt) { return }

    $namespace = @{ns = "http://schemas.microsoft.com/dynamics/2012/03/development/configuration" }
    $defaultModel = Select-Xml -XPath "/ns:DynamicsDevConfig/ns:DefaultModelForNewProjects" -Path $filePath -Namespace $namespace

    $modelName = $defaultModel.Node.InnerText
    [PSCustomObject] @{DefaultModelForNewProjects = $modelName }
}