update_skuids.ps1


Remove-Module -Name "CT-PS-UserMgmt" -Force -Verbose:$VerbosePreference -ErrorAction Continue

$SKUIDLink = "https://download.microsoft.com/download/e/3/e/e3e9faf2-f28b-490a-9ada-c6089a1fc5b0/Product%20names%20and%20service%20plan%20identifiers%20for%20licensing.csv"

$env:CTPSUserMgmtSelfUpdate = "True"

$skuidCSV = Invoke-WebRequest -Uri $SKUIDLink -UseBasicParsing # -OutFile "skuids.csv"

$SkuidList = ConvertFrom-Csv $skuidCSV

$skuids = @()

$TotalItems = $SkuidList.Count
$CurrentItem = 0
$PercentComplete = 0

$FilePath = "$PSScriptRoot\CT-PS-UserMgmt.psm1"


foreach($skuidID in $SkuidList) {
    Write-Progress -Activity "Compiling O365 Skuids" -Status "$PercentComplete% Complete:" -PercentComplete $PercentComplete
    $skuidIDName = $skuidID.String_Id.trim()
    $skuidIDName = $skuidIDName.replace(" ","_")
    $skuidIDName = $skuidIDName.replace("(","")
    $skuidIDName = $skuidIDName.replace(")","")
    $skuidIDName = $skuidIDName.replace("/","")
    $skuidIDName = $skuidIDName.replace("+","")
    $skuidIDName = $skuidIDName.replace("`t","")

    $skuidSPN = "$($skuidID.String_Id.trim())_$($skuidID.Service_Plan_Name.trim())" 
    $skuidSPN = $skuidSPN.replace(" ","_")
    $skuidSPN = $skuidSPN.replace("(","")
    $skuidSPN = $skuidSPN.replace(")","")
    $skuidSPN = $skuidSPN.replace("/","")
    $skuidSPN = $skuidSPN.replace("+","")
    $skuidSPN = $skuidSPN.replace("`t","")

    if (!($skuids | where-object -FilterScript {$_ -in $skuidIDName})) {
        $skuids += $skuidIDName
    }
    if (!($skuids | where-object -FilterScript {$_ -in $skuidSPN})) {
        $skuids += $skuidSPN
    }
    $CurrentItem++
    $PercentComplete = [int](($CurrentItem / $TotalItems) * 100)
}


$skuidreplacement = "#<!-- SKUID START -->`n enum O365skuids`n {`n"
foreach($skuid in $skuids){
    $skuidreplacement = $skuidreplacement + " $($skuid)`n"
}
$skuidreplacement = $skuidreplacement + " }`n #<!-- SKUID END -->`n"


$allTheText = [System.Io.File]::ReadAllText($FilePath)

$FindText = $allTheText | select-string '(?smi)#<!-- SKUID START -->[^!]+<!-- SKUID END -->' | %{ $_.Matches } | %{ $_.Value }

$replacedContent = $allTheText.Replace($FindText,$skuidreplacement)

$replacedContent | Set-Content -Path "$PSScriptRoot\CT-PS-UserMgmt.psm1"

Import-Module -Name "CT-PS-UserMgmt" -Scope Local -Verbose:$VerbosePreference -ErrorAction Stop