首先,这是我的第一篇文章,所以如果我错误地将其发布在错误的位置,请告诉我。
所以,我们要完成的是构建一个PowerShell脚本,我们可以将其放在我们的工作站图像上,这样一旦我们的Windows 10盒子完成成像,我们可以点击一个powershell脚本,让它从BIOS中取出键,并自动激活它。话虽这么说,这是我们从各种来源汇总的脚本。
(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey | out-file c:\license.txt
$computer = gc env:computername
$key = get-content c:\license.txt
$service = get-wmiObject -query “select * from SoftwareLicensingService” -computername $computer
$service.InstallProductKey($key) <--------THIS IS WHERE IT FAILS
$service.RefreshLicenseStatus()
我们开始讨论$service.InstallProductKey($key)
线上的问题。看来,无论我们如何尝试调用它,它都会一直失败并出现错误“异常调用”InstallProductKey“”。我甚至用特定的激活密钥替换了变量($key
),并且它仍然以相同的错误失败。
我们将其输出到许可证txt文件的部分原因是我们可以验证命令确实是拉动产品密钥(它是什么)。
在这一点上,我不知道该往哪里去。似乎人们之前已经尝试过这样做,然而,没有人真正用他们的工作和/或没有工作来完成他们的工作。我无法想象这是不可能的,但我也不喜欢浪费时间而不是需要,所以任何对这个问题有任何见解的人,我都会非常感激。
我们已经让它在以前被激活的两台机器上工作,后来被停用,但是在刚刚成像的新机器上,并且尚未被激活,它每次都会失败。
根据我的观察,有两件事:
(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey | out-file c:\license.txt
我不认为它会给你的license.txt返回任何值。如果是,那么我希望您查看许可证密钥之前和之后是否有任何空格。您可以在从文件中获取内容时使用trim。
第二件事,当你从文件中获取内容时,确保它没有分成多行。在这种情况下,您必须将其转换为字符串,如[String] $ key,或者您可以为此调用toString()方法。
更重要的是在安装后刷新。
$service.RefreshLicenseStatus()
注意:确保以提升模式运行shell。
替代方法:尝试对值进行硬编码并查看结果
$key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" # hardcode the key
$computer= "Computer01" # Hardcode the computer
$service = get-wmiObject -query "select * from SoftwareLicensingService" -computername $computer
$service.InstallProductKey($key)
$service.RefreshLicenseStatus()
更进一步,请发布确切的错误。希望能帮助到你...!!!
发现Get-WmiObject
的钥匙最后有空白。如果添加了.Trim()
,原始命令将起作用。也不以管理员身份运行会导致相同的错误。
(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey | out-file c:\license.txt
$computer = gc env:computername
$key = (get-content c:\license.txt).Trim() #trim here
$service = get-wmiObject -query “select * from SoftwareLicensingService” -computername $computer
$service.InstallProductKey($key)
$service.RefreshLicenseStatus()