uploaded v4.0 https://forums.mydigitallife.net/threads/62571/page-258#post-1824883 fixed stop service command, sc is also an alias in PS, not just a CMD command replace with this instead ** I need to stop this thing of C/P command to PS ... it's not always working, most of the time it is, but not always Code: gwmi Win32_Service | ? Name -Match "WSearch|ClickToRunSvc" | % { $_.StopService() | Out-Null } Get-Service -Name @("WSearch", "ClickToRunSvc") | Stop-Service -Force -PassThru | Out-Null
Just as a follow up to this. I have 2 PCs I am decommissioning. Do I have to do something to deactivate their licences to return them to the pool of available licences or reduce the used license count before wiping the PCs?
Microsoft Office LTSC Professional Plus, Can I install the version on Macbook? Do I have a chance to get a KMS license? (I'm sorry if I wrote in the wrong topic. This is my first time working with a Macbook. I have no knowledge. We do not use Windows at work.)
Good afternoon, you see, I have purchased an Office 2021 Professional Plus license but I don't know where I can download the latest version available in Spanish. All the best.
What? You choose the product you purchased. There is no "Office ltsc" option (two words) in the list, so it is not clear where you are looking for it.
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()} }