Public/MSCommerce/Disable-MSSelfServicePurchase.ps1

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


function Disable-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
    $enabledProducts = Get-MSCommerceProductPolicies -PolicyId AllowSelfServicePurchase | Where-Object { $_.PolicyValue -eq 'Enabled' }
    foreach ($product in $enabledProducts) {
        Write-Host -ForegroundColor Cyan "Disabling self-service purchase for product: $($product.ProductID) - $($product.ProductName)"

        if ($Force -or $PSCmdlet.ShouldProcess($product.ProductID, 'Disable 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 $false -InformationAction SilentlyContinue -ErrorAction Stop
                Write-Host -ForegroundColor Green "Successfully disabled self-service purchase for product: $($product.ProductID) - $($product.ProductName)"
            }
            catch {
                Write-Error "Failed to disable self-service purchase for product: $($product.ProductID) - $($product.ProductName). Error: $_"
            }
        }
    }
}