There are a lot of script examples out there and even key recovery tools that promise to return the full product key, but in many cases, the returned key is not your windows product key.
When you resort to key recovery tools, you typically lost your product key, so there is no easy way for you to check whether the promised key returned by key recovery scripts or tools is correct or not.
Fortunately, WMI can at least return a “partial” product key. This way, you can verify that a recovered key in fact is valid.
The SoftwareLicensingProduct WMI class returns rich information about licensing status of most Microsoft products. This line below dumps all licensing information for all Microsoft products that start with “Windows” and have a license status other than 0:
PS> Get-CimInstance -ClassName SoftwareLicensingProduct -Filter 'Name LIKE "Windows%" AND LicenseStatus>0' ADActivationCsvlkPid : ADActivationCsvlkSkuId : ADActivationObjectDN : ADActivationObjectName : ApplicationID : 55c92734-d682-4d71-983e-d6ec3f16059f AutomaticVMActivationHostDigitalPid2 : AutomaticVMActivationHostMachineName : AutomaticVMActivationLastActivationTime : 01.01.1601 01:00:00 Description : Windows(R) Operating System, OEM_DM channel DiscoveredKeyManagementServiceMachineIpAddress : DiscoveredKeyManagementServiceMachineName : DiscoveredKeyManagementServiceMachinePort : 0 EvaluationEndDate : 01.01.1601 01:00:00 ExtendedGrace : 4294967295 GenuineStatus : 0 GracePeriodRemaining : 0 IAID : ID : bd3762d7-270d-4760-8fb3-d829ca45278a IsKeyManagementServiceMachine : 0 KeyManagementServiceCurrentCount : 4294967295 KeyManagementServiceFailedRequests : 4294967295 KeyManagementServiceLicensedRequests : 4294967295 KeyManagementServiceLookupDomain : KeyManagementServiceMachine : KeyManagementServiceNonGenuineGraceRequests : 4294967295 KeyManagementServiceNotificationRequests : 4294967295 KeyManagementServiceOOBGraceRequests : 4294967295 KeyManagementServiceOOTGraceRequests : 4294967295 KeyManagementServicePort : 0 KeyManagementServiceProductKeyID : KeyManagementServiceTotalRequests : 4294967295 KeyManagementServiceUnlicensedRequests : 4294967295 LicenseDependsOn : LicenseFamily : Professional LicenseIsAddon : False LicenseStatus : 1 LicenseStatusReason : 1074066433 MachineURL : Name : Windows(R), Professional edition OfflineInstallationId : 563276155667058052465840741114524545879016766601431504369777043 PartialProductKey : WFG6P ...
Unfortunately, this call takes a long time to complete. To speed it up, tell WMI what you are after so that the call won’t calculate expensive information that you don’t need. The call below reads only the PartialProductKey property from the required instances and is a lot faster:
PS> Get-CimInstance -Query 'Select PartialProductKey From SoftwareLicensingProduct Where Name LIKE "Windows%" AND LicenseStatus>0' | Select-Object -ExpandProperty PartialProductKey WFG6P