src/Security/New-XrmConnectionRole.ps1

<#
    .SYNOPSIS
    Create a new connection role in Microsoft Dataverse.

    .DESCRIPTION
    Create a connectionrole record.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient)

    .PARAMETER Name
    Connection role display name.

    .PARAMETER Category
    Connection role category value. Optional. (e.g. 1=Business, 2=Family, 3=Social, 4=Sales, 5=Other, 1000=Stakeholder, 1001=Sales Team, 1002=Service)

    .PARAMETER Description
    Connection role description. Optional.

    .OUTPUTS
    Microsoft.Xrm.Sdk.EntityReference. Reference to the created connectionrole record.

    .EXAMPLE
    $roleRef = New-XrmConnectionRole -Name "Project Manager" -Category 1;

    .LINK
    https://learn.microsoft.com/en-us/power-apps/developer/data-platform/describe-relationship-entities-connection-roles
#>

function New-XrmConnectionRole {
    [CmdletBinding()]
    [OutputType([Microsoft.Xrm.Sdk.EntityReference])]
    param
    (
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Name,

        [Parameter(Mandatory = $false)]
        [int]
        $Category,

        [Parameter(Mandatory = $false)]
        [string]
        $Description
    )
    begin {
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);
    }
    process {
        $record = New-XrmEntity -LogicalName "connectionrole" -Attributes @{
            "name" = $Name;
        };

        if ($PSBoundParameters.ContainsKey('Category')) {
            $record["category"] = New-XrmOptionSetValue -Value $Category;
        }
        if ($PSBoundParameters.ContainsKey('Description')) {
            $record["description"] = $Description;
        }

        $record.Id = $XrmClient | Add-XrmRecord -Record $record;
        $record.ToEntityReference();
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }
}

Export-ModuleMember -Function New-XrmConnectionRole -Alias *;