Forum Discussion
Pat O'Neil
Jun 17, 2019Copper Contributor
Windows 10 Subscription Activation via Powershell
We recently purchased E3 Subscription licenses for Windows 10. Microsoft's documentation states for exisiting enterprise deployments, the following script should be ran via a command line:
@echo off FOR /F "skip=1" %%A IN ('wmic path SoftwareLicensingService get OA3xOriginalProductKey') DO ( SET "ProductKey=%%A" goto InstallKey ) :InstallKey IF [%ProductKey%]==[] ( echo No key present ) ELSE ( echo Installing %ProductKey% changepk.exe /ProductKey %ProductKey% )
I'm attempting to re-write this in powershell so we can use it as a remediation step in a configuration baseline in SCCM. Below is the powershell script I wrote:
$ProductKey = (Get-CimInstance -ClassName SoftwareLicensingService).OA3xOriginalProductKey
if ($ProductKey){
start-process c:\Windows\System32\changePK.exe -ArgumentList "/ProductKey $ProductKey"
}
The script runs without error, but it's not actually completing the intended task (activating the embedded windows 10 pro key). I'm not sure where I'm going wrong. I'm pretty new to powershell so any assistance would be greatly appreciated.
- Graham WattsCopper Contributor
Your if statement appears to be missing an evaluation. As you have it originally you have this
if($ProductKey)
So in effect, to quote, "if Product Key what?". What do you want product key to be? I would say you want the script block below to run if the product key is not null/emtpy, correct? So something like this might work
$ProductKey = (Get-CimInstance -ClassName SoftwareLicensingService).OA3xOriginalProductKey
if ($null -ne $ProductKey)
{
start-process c:\Windows\System32\changePK.exe -ArgumentList "/ProductKey $ProductKey"
}- Pat O'NeilCopper Contributor
Thanks for the response. I made the change based on your suggestion and what this did was pull up the GUI version of the windows key activation where it asks to manually enter the key. Progress, you could say, but this script needs to be silent and input that information on it's own. This gives me something to work on, but if you have any more suggestions, I would greatly appreciate it.
- Graham WattsCopper Contributor
OK, I'll admit I didn't validate the actual process you were running initially; it looked visually OK at a first glance.
Some quick playing shows that changePK.exe seems to suck when called via Start-Process or Invoke-Expression. So, what I've done instead is switch to another licensing utility instead, slmgr.vbs.
Try this:
$ProductKey = (Get-CimInstance -ClassName SoftwareLicensingService).OA3xOriginalProductKey
if ($null -ne $ProductKey)
{
Start-Process -FilePath "c:\Windows\System32\slmgr.vbs" -ArgumentList "/ipk $ProductKey"
}