使用批处理命令使用 BIOS 产品密钥激活 Windows 8.1
Activating Windows 8.1 with BIOS product key with batch command
我需要将 windows 图像部署到多台装有 Windows 8.1 的计算机。
我确实设法将驱动程序和更新以及一些必要的软件注入安装映像,但不知何故,似乎只安装 Windows 不会激活操作系统,我必须找到嵌入在 BIOS 中的许可证密钥和手动激活它们。
我发现 wmic path softwarelicenseingservice get oa3xoriginalproductkey
可用于从 bios 中提取产品密钥,我正在考虑编写一个批处理文件,将此命令与 slmgr -ipk
和 slmgr -ato
,然后将其设置为运行作为第一个登录命令。
问题是我对批处理语法知之甚少,而且我很难将产品密钥分配为变量并将其传递给 slmgr 命令。
似乎wmic命令returns结果为:
OA3xOriginalProductKey
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
<blank line>
因此 returns 三行文本中的产品密钥,实际有用的信息夹在其他字符串之间。我怎样才能从该文本中获取中间(或第二)行并将其分配为变量?
也许这对您有用。请注意,它确实涉及一个临时文本文件。
wmic path softwarelicenseingservice get oa3xoriginalproductkey > temp.txt
3<temp.txt (
set /p var= <&3
set /p var= <&3
)
del temp.txt
Echo %var%
这将始终从命令中提取第二行输出。
我已经用您提供的数据对此进行了测试,并输出了 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
。要访问此变量,请始终将其称为 %var%
.
这是我的做法
登录脚本 accept powershell 比旧的批处理文件具有更多功能和强度的脚本。
$key = Get-WmiObject -Class SoftwareLicensingService |
Select-Object OA3xOriginalProductKey | foreach { "{0}" -f $_.OA3xOriginalProductKey }
使用此命令,您可以将 ProductID 放入 $key 变量中,并可以随意对其进行任何操作
cscript.exe C:\Windows\System32\slmgr.vbs /upk
cscript.exe C:\Windows\System32\slmgr.vbs /cpky
for /f "tokens=2 delims='='" %%K IN ('wmic path softwarelicensingservice get OA3xOriginalProductkey /value') do set pk=%%K
cscript.exe C:\Windows\System32\slmgr.vbs /ipk %pk%
cscript.exe C:\Windows\System32\slmgr.vbs /ato
cscript.exe C:\Windows\System32\slmgr.vbs /dli
将其保存为批处理文件并尝试
这就是我需要的。
效果很好。
for /f "tokens=2 delims='='" %%K IN ('wmic path softwarelicensingservice get OA3xOriginalProductkey /value') do set pk=%%K
slmgr.vbs /ipk "%pk%"
slmgr.vbs /ato
我需要将 windows 图像部署到多台装有 Windows 8.1 的计算机。 我确实设法将驱动程序和更新以及一些必要的软件注入安装映像,但不知何故,似乎只安装 Windows 不会激活操作系统,我必须找到嵌入在 BIOS 中的许可证密钥和手动激活它们。
我发现 wmic path softwarelicenseingservice get oa3xoriginalproductkey
可用于从 bios 中提取产品密钥,我正在考虑编写一个批处理文件,将此命令与 slmgr -ipk
和 slmgr -ato
,然后将其设置为运行作为第一个登录命令。
问题是我对批处理语法知之甚少,而且我很难将产品密钥分配为变量并将其传递给 slmgr 命令。
似乎wmic命令returns结果为:
OA3xOriginalProductKey
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
<blank line>
因此 returns 三行文本中的产品密钥,实际有用的信息夹在其他字符串之间。我怎样才能从该文本中获取中间(或第二)行并将其分配为变量?
也许这对您有用。请注意,它确实涉及一个临时文本文件。
wmic path softwarelicenseingservice get oa3xoriginalproductkey > temp.txt
3<temp.txt (
set /p var= <&3
set /p var= <&3
)
del temp.txt
Echo %var%
这将始终从命令中提取第二行输出。
我已经用您提供的数据对此进行了测试,并输出了 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
。要访问此变量,请始终将其称为 %var%
.
这是我的做法
登录脚本 accept powershell 比旧的批处理文件具有更多功能和强度的脚本。
$key = Get-WmiObject -Class SoftwareLicensingService |
Select-Object OA3xOriginalProductKey | foreach { "{0}" -f $_.OA3xOriginalProductKey }
使用此命令,您可以将 ProductID 放入 $key 变量中,并可以随意对其进行任何操作
cscript.exe C:\Windows\System32\slmgr.vbs /upk
cscript.exe C:\Windows\System32\slmgr.vbs /cpky
for /f "tokens=2 delims='='" %%K IN ('wmic path softwarelicensingservice get OA3xOriginalProductkey /value') do set pk=%%K
cscript.exe C:\Windows\System32\slmgr.vbs /ipk %pk%
cscript.exe C:\Windows\System32\slmgr.vbs /ato
cscript.exe C:\Windows\System32\slmgr.vbs /dli
将其保存为批处理文件并尝试
这就是我需要的。
效果很好。
for /f "tokens=2 delims='='" %%K IN ('wmic path softwarelicensingservice get OA3xOriginalProductkey /value') do set pk=%%K
slmgr.vbs /ipk "%pk%"
slmgr.vbs /ato