Office Licenses Information by Yerong ~ New version updated with latest keys of 2024 channel thanks abbodi1406 for providing the new keys still have some missing retail keys .. it is what it is.
`pkeyconfig` data reader, just for fun [v6] new Result's ..................... Code: Ref: 5041 Type: Volume:GVLK ID: {FCEDA083-1203-402A-8EC4-3D7ED9F3648C} Name: Office24_ProPlus2024PreviewVL_KMS_Client_AE KeyInfo command line usage => KeyInfo 13B1 0 0 KeyRange: [0] => [999], Number: X23-60459, Type: ltKMS, IsValid: True Ref: 5044 Type: Volume:MAK ID: {8FDB1F1E-663F-4F2E-8FDB-7C35AEE7D5EA} Name: Office24_ProPlus2024PreviewVL_MAK_AE KeyInfo command line usage => KeyInfo 13B4 0 0 KeyRange: [0] => [99999], Number: X23-60462, Type: ltMAK, IsValid: True Spoiler: Source Code Code: Class KeyRange { [string] $RefActConfigId [string] $PartNumber [string] $EulaType [bool] $IsValid [int] $Start [int] $End } Class ConfigInfo { [string] $ActConfigId [int] $RefGroupId [string] $ProductDescription [string] $ProductKeyType [bool] $IsRandomized [KeyRange[]] $KeyRanges [String] ToString() { $output = $null $GroupId = [System.String]::Format("{0:X}",$this.RefGroupId) $output = "Ref: $($this.RefGroupId)`nType: $($this.ProductKeyType)`nID: $($this.ActConfigId)`nName: $($this.ProductDescription)`n" $output += "KeyInfo command line usage => KeyInfo $($GroupId) 0 0`n" $this.KeyRanges | Sort-Object -Property @{Expression = "Start"; Descending = $false } | % { $keyInfo = $_ -as [KeyRange] $output += "KeyRange: [$($keyInfo.Start)] => [$($keyInfo.End)], Number: $($keyInfo.PartNumber), Type: $($keyInfo.EulaType), IsValid: $($keyInfo.IsValid)`n" } return $output } } $LicenseInfo = Join-Path @([Environment]::GetFolderPath("Desktop")) 'LicenseInfo.xml' Function GenerateConfigList { param ( [ValidateNotNullOrEmpty()] [Parameter(ValueFromPipeline)] [string] $pkeyconfig = "$env:ProgramFiles\Microsoft Office\root\Licenses16\pkeyconfig-office.xrm-ms" ) $Output = @{} if (-not [IO.FILE]::Exists($pkeyconfig)) { return $null } $data = Get-Content -Path $pkeyconfig $iStart = $data.IndexOf('<tm:infoBin name="pkeyConfigData">') + 34 $iEnd = $data.Substring($iStart).IndexOf('</tm:infoBin>') $Conf = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($data.Substring($iStart, $iEnd))) $iStart = $Conf.IndexOf('<pkc:Configurations>') + 21 $iEnd = [INT]::Parse($Conf.IndexOf('</pkc:Configurations>')) - $iStart $Configurations = $Conf.Substring($iStart,$iEnd) -split '<pkc:Configuration>' $iStart = $Conf.IndexOf('<pkc:KeyRanges>') + 17 $iEnd = [INT]::Parse($Conf.IndexOf('</pkc:KeyRanges>')) - $iStart $KeyRanges = $Conf.Substring($iStart,$iEnd) -split '<pkc:KeyRange>' $Configurations | % { $Source = $_|Out-String if ($Source.IndexOf('<pkc:ActConfigId>') -ne '-1') { $iStart = $Source.IndexOf('<pkc:ActConfigId>') + 17 $iEnd = $Source.IndexOf('</pkc:ActConfigId>') - $iStart $ActConfigId = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:RefGroupId>') + 16 $iEnd = $Source.IndexOf('</pkc:RefGroupId>') - $iStart $RefGroupId = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:EditionId>') + 15 $iEnd = $Source.IndexOf('</pkc:EditionId>') - $iStart $EditionId = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:ProductDescription>') + 24 $iEnd = $Source.IndexOf('</pkc:ProductDescription>') - $iStart $ProductDescription = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:ProductKeyType>') + 20 $iEnd = $Source.IndexOf('</pkc:ProductKeyType>') - $iStart $ProductKeyType = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:IsRandomized>') + 18 $iEnd = $Source.IndexOf('</pkc:IsRandomized>') - $iStart $IsRandomized = $Source.Substring($iStart, $iEnd) -as [BOOL] $cInfo = [ConfigInfo]::new() $cInfo.ActConfigId = $ActConfigId $cInfo.IsRandomized= $IsRandomized $cInfo.ProductDescription = $ProductDescription $cInfo.RefGroupId = $RefGroupId $cInfo.ProductKeyType = $ProductKeyType $cInfo.KeyRanges = $Output.Add( $ActConfigId, $cInfo ) }} $KeyRanges | % { $Source = $_|Out-String if ($Source.IndexOf('<pkc:RefActConfigId>') -ne '-1') { $iStart = $Source.IndexOf('<pkc:RefActConfigId>') + 20 $iEnd = $Source.IndexOf('</pkc:RefActConfigId>') - $iStart $RefActConfigId = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:PartNumber>') + 16 $iEnd = $Source.IndexOf('</pkc:PartNumber>') - $iStart $PartNumber = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:EulaType>') + 14 $iEnd = $Source.IndexOf('</pkc:EulaType>') - $iStart $EulaType = $Source.Substring($iStart, $iEnd) $iStart = $Source.IndexOf('<pkc:IsValid>') + 13 $iEnd = $Source.IndexOf('</pkc:IsValid>') - $iStart $IsValid = $Source.Substring($iStart, $iEnd) -as [BOOL] $iStart = $Source.IndexOf('<pkc:Start>') + 11 $iEnd = $Source.IndexOf('</pkc:Start>') - $iStart $Start = $Source.Substring($iStart, $iEnd) -as [INT] $iStart = $Source.IndexOf('<pkc:End>') + 9 $iEnd = $Source.IndexOf('</pkc:End>') - $iStart $End = $Source.Substring($iStart, $iEnd) -as [INT] $kRange = [KeyRange]::new() $kRange.End = $End $kRange.Start = $Start $kRange.IsValid = $IsValid $kRange.EulaType = $EulaType $kRange.PartNumber = $PartNumber $kRange.RefActConfigId = $RefActConfigId $cInfo = $Output[$RefActConfigId] -as [ConfigInfo] $cInfo.KeyRanges += $kRange } } return $Output.Values } cls; Write-Host; $Licenses = GenerateConfigList | OGV -Title 'Select Licenses' -OutputMode Multiple if ($Licenses) { $Licenses | % {$_.ToString()} }
Hi I was using YAOCTRU_v9.0 and The script didn´t detect latest version of Office 2024. I saw that Microsoft Office 2024 v2405 Build 17706.2000 Preview ist out, but the script detects only Microsoft Office 2024 v2405 Build 17702.2000 Preview. So I tried YAOCTRU_v10.0 but still the same. Is there a way to fix it?
Thanks abbodi1406. Just to know. Is Microsoft Office 2024 still "DevMain Channel" or changed it to "Beta / Insider Fast" ?
this RTM license's only work under dev main channel only any other case, word fail old news, ignore this
ERROR: could not check available version online, possible reasons: - internet connection not working - Windows Powershell is disabled - .NET Framework is not updated to support TLS 1.2 connection protocol Hi everyone, when I try to start YAOCTRU I get this message, do you know what's causing it? Thank you