ConvertOfficeSKU.psm1

function Convert-OfficeSku {
<#
.SYNOPSIS
    Convert SKU to Friedly Name.
 
.DESCRIPTION
    Convert Office SKU IDs to friendly names based on the Microsoft License Service Plan Reference.
 
.LINK
    .Linkedin: https://www.linkedin.com/in/erickvtorres/
    .GitHub: https://github.com/erickvtorres
    .Reference: https://learn.microsoft.com/en-us/azure/active-directory/enterprise-users/licensing-service-plan-reference
 
.NOTES
    .Creator: Erick Torres do Vale
    .Contact: ericktorres@hotmail.com.br
    .Date: 2023-09-13
    .LastUpdate: 2023-09-13
    .Version: 0.0.2
 
.PARAMETER All
    List all licenses available
 
.PARAMETER AccountSkuID
    Convert license from SkuID
 
.PARAMETER ProductName
Convert license from ProductName
 
.PARAMETER Guid
    Convert license from GUID
 
.EXAMPLE
    Convert-OfficeSku -All
 
    Convert-OfficeSku -AccountSkuID SPE_E3,SPE_E5
    ProductName StringID GUID
    ----------- -------- ----
    Microsoft 365 E3 SPE_E3 05e9a617-0261-4cee-bb44-138d3ef5d965
    Microsoft 365 E5 SPE_E5 06ebc4ee-1bb5-47dd-8120-11324bc54e06
 
    Convert-OfficeSku -ProductName 'Microsoft 365 E3','Microsoft 365 E5'
    ProductName StringID GUID
    ----------- -------- ----
    Microsoft 365 E3 SPE_E3 05e9a617-0261-4cee-bb44-138d3ef5d965
    Microsoft 365 E5 SPE_E5 06ebc4ee-1bb5-47dd-8120-11324bc54e06
 
     
    Convert-OfficeSku -Guid 05e9a617-0261-4cee-bb44-138d3ef5d965
    ProductName StringID GUID
    ----------- -------- ----
    Microsoft 365 E3 SPE_E3 05e9a617-0261-4cee-bb44-138d3ef5d965
 
#>

    [CmdletBinding(DefaultParameterSetName = 'Sku')]
    param (
        [Parameter(Mandatory = $false, ValueFromRemainingArguments = $true, ValueFromPipeline = $true, ParameterSetName = 'Sku')]
        [alias('SkuID')]
        [array]$AccountSkuID,

        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'ProductName')]
        [array]$ProductName,

        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'Guid')]
        [array]$Guid,

        [Parameter(Mandatory = $false, ParameterSetName = 'All')]
        [switch]$All
    )
    
    begin {
        try {
            $List = Import-Csv -Path $PSScriptRoot\LicNames.csv
        }
        catch {
            Write-Error -Message 'LicNames file is missing'
            Break
        }
    }
    
    process {
        switch ($PSBoundParameters.Keys) {
            AccountSkuID {
                $AccountSkuID | ForEach-Object {
                    $Name = $_
                    $List | Where-Object {$_.StringID -eq $Name}
                }
            }
            
            ProductName {
                $ProductName | ForEach-Object {
                    $Name = $_
                    $List | Where-Object {$_.ProductName -eq $Name}
                }
            }
                        
            Guid {
                $Guid | ForEach-Object {
                    $Name = $_
                    $List | Where-Object {$_.Guid -eq $Name}
                }
            }

            All          {
                Return $List
            }
            Default {}
        }
    }
    
    end {
        if (((Get-Date) - $(Get-Date -Date '2023-09-14')).Days -gt 360){
            Write-Warning -Message "Last update was 2023-09-14`nLink: https://learn.microsoft.com/en-us/azure/active-directory/enterprise-users/licensing-service-plan-reference" 
        }
    }
}