src/Metadata/New-XrmGlobalOptionSet.ps1

<#
    .SYNOPSIS
    Create a global option set in Microsoft Dataverse.

    .DESCRIPTION
    Create a new global option set using CreateOptionSetRequest.

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

    .PARAMETER OptionSetMetadata
    The OptionSetMetadata object defining the global option set.

    .PARAMETER SolutionUniqueName
    Solution unique name to add the global option set to.

    .OUTPUTS
    Microsoft.Xrm.Sdk.OrganizationResponse. The CreateOptionSet response.

    .EXAMPLE
    $os = [Microsoft.Xrm.Sdk.Metadata.OptionSetMetadata]::new();
    $os.Name = "new_priority";
    $os.DisplayName = New-XrmLabel -Text "Priority";
    $os.IsGlobal = $true;
    $os.OptionSetType = [Microsoft.Xrm.Sdk.Metadata.OptionSetType]::Picklist;
    New-XrmGlobalOptionSet -OptionSetMetadata $os;
#>

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

        [Parameter(Mandatory = $true)]
        [ValidateNotNull()]
        [Microsoft.Xrm.Sdk.Metadata.OptionSetMetadataBase]
        $OptionSetMetadata,

        [Parameter(Mandatory = $false)]
        [string]
        $SolutionUniqueName
    )
    begin {
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);
    }
    process {
        $request = [Microsoft.Xrm.Sdk.Messages.CreateOptionSetRequest]::new();
        $request.OptionSet = $OptionSetMetadata;

        if ($PSBoundParameters.ContainsKey('SolutionUniqueName')) {
            $request.Parameters["SolutionUniqueName"] = $SolutionUniqueName;
        }

        $response = Invoke-XrmRequest -XrmClient $XrmClient -Request $request;
        $response;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }
}

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