Public/MSCommerce/Enable-MSSelfServicePurchase.ps1

<#
    .SYNOPSIS
    Enables self-service purchase for all products in Microsoft 365.
 
    .DESCRIPTION
    This function connects to the Microsoft Commerce service and enables the self-service purchase
    option for all products that currently have it disabled. This is useful for organizations that
    want to allow users to purchase additional services or products on their own.
 
    .PARAMETER Force
    Skips confirmation prompts and enables self-service purchase for all products without asking.
 
    .EXAMPLE
    Enable-MSSelfServicePurchase
 
    Enables self-service purchase for all products in the Microsoft 365 tenant, prompting for confirmation for each product.
 
    .EXAMPLE
    Enable-MSSelfServicePurchase -Force
 
    Enables self-service purchase for all products without prompting for confirmation.
 
    .LINK
    https://ps365.clidsys.com/docs/commands/Enable-MSSelfServicePurchase
#>


function Enable-MSSelfServicePurchase {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
    param (
        [switch]$Force
    )

    # Install-Module -Name MSCommerce -Scope CurrentUser
    # Install-PSRessource -Name MSCommerce -Scope CurrentUser
    Import-Module -Name MSCommerce
    # Global Administrator or Billing Administrator permissions are required to run this script
    Connect-MSCommerce
    $disabledProducts = Get-MSCommerceProductPolicies -PolicyId AllowSelfServicePurchase | Where-Object { $_.PolicyValue -eq 'Disabled' }
    foreach ($product in $disabledProducts) {
        Write-Host -ForegroundColor Cyan "Enabling self-service purchase for product: $($product.ProductID) - $($product.ProductName)"

        if ($Force -or $PSCmdlet.ShouldProcess($product.ProductID, 'Enable self-service purchase')) {
            try {
                # $null because Update-MSCommerceProductPolicy returns by default the updated product policy, but we don't need it here
                $null = Update-MSCommerceProductPolicy -PolicyId AllowSelfServicePurchase -ProductId $product.ProductID -Enabled $true -InformationAction SilentlyContinue -ErrorAction Stop
                Write-Host -ForegroundColor Green "Successfully enabled self-service purchase for product: $($product.ProductID) - $($product.ProductName)"
            } catch {
                Write-Error "Failed to enable self-service purchase for product: $($product.ProductID) - $($product.ProductName). Error: $_"
            }
        }
    }
}