Вытащить OEM ключ и активировать

Я работаю в качестве партнера Microsoft в процессе кредитования и посева для Surface Pro 3 и 4. Мы перезаписываем сотни устройств в день и имеем проблемы с цифровыми правами. Мне нужен способ вытащить OEM-ключ из устройства и принудительно активировать его этим ключом. Я пытаюсь сделать это с помощью сценария PowerShell:

$computer = gc env:computername

$key = (Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey | Out-String


$service = get-wmiObject -query “select * from SoftwareLicensingService” -computername $computer

$service.InstallProductKey($key)

$service.RefreshLicenseStatus()

Я получаю ошибку:

Exception calling "InstallProductKey" : ""
At line:7 char:1
+ $service.InstallProductKey((Get-WmiObject -query ‘select * from Softw ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WMIMethodException

любая помощь будет признательна, либо с исправлением этой ошибки, либо, если есть более простой способ выполнить то, что я делаю. Спасибо!

РЕДАКТИРОВАТЬ: Добавлена ​​ловушка исключений, новая ошибка

Cannot convert the "System.Runtime.InteropServices.COMException (0xC004F025)
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32      errorCode, IntPtr errorInfo)
   at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, 
InvokeMethodOptions options)
   at System.Management.Automation.ManagementObjectAdapter.InvokeManagementMethod(ManagementObject obj, String 
methodName, ManagementBaseObject inParams)" value of type    "System.Management.Automation.ErrorRecord" to type 
"System.Management.ManagementException".
At line:3 char:1
+ [System.Management.ManagementException] $_
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ConvertToFinalInvalidCastException

1 ответ

Попробуйте добавить .Trim() до конца ключа

У меня была похожая проблема с моим кодом ниже, который выдает ту же ошибку, вызывая исключение "InstallProductKey" : "" Оказалось $key возвращал ключевую строку + несколько пробелов после нее. Кредиты @elexis за то, что подобрали его. Не могу найти решение нигде для этого.

$computer = gc env:computername
$key = (wmic path softwarelicensingservice get oa3xoriginalproductkey)[2].Trim() #<--The Trim is to remove the white space aftewards which causes an error
Write-Output $key

$service = get-wmiObject -query "select * from SoftwareLicensingService" -computername $computer
$service.InstallProductKey($key)
$service.RefreshLicenseStatus()
Другие вопросы по тегам