普通电脑上要获取windows productkey,管理员身份打开cmd,执行这句命令即可
powershell "(Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey"
普通云服务器上,上面命令执行结果为空,为啥为空,执行powershell "(Get-WmiObject -query 'select * from SoftwareLicensingService')"就能看到
那如何查看productkey呢?有个第三方软件ProduKey可以查看,不过这个软件会被一些安全软件自动拦截甚至自动清理比如360和server 2016 、2019上的windows defender,由于defender太敏感了,我一般是买新机器或重装系统后首先关闭defender。
软件官网:https://www.nirsoft.net/utils/product_cd_key_viewer.html
双击ProduKey.exe打开图形界面即可看到windows product key,例如
补充:以备不时之需
腾讯云公共镜像(含safe镜像),不区分中英文版
Windows Server 2008R2企业版
ProductKey: 489J6-VHDMP-X63PK-3K798-CPX3Y
Windows Server 2012R2数据中心版 ProductKey: W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
Windows Server 2016数据中心版 ProductKey: CB7KF-BWN84-R7R2Y-793K2-8XDDG
Backup ProductKey:RYNGC-7H7T8-PFJ8K-B9JMR-9W39T
Windows Server 2019数据中心版 ProductKey: WMDGN-G9PQG-XVVXX-R3X43-63DFG
Backup ProductKey:PR3DM-NGHRJ-RXJQT-FFJPV-JQPH6
Windows Server 2022 数据中心版
ProductKey: WX4NM-KYWYW-QJJR4-XV3QB-6VM33
Backup ProductKey:X93C6-JNQJY-CC77M-6YKVG-6F7HQ
2016和2019有个BackupProductKeyDefault,也是能用的,powershell执行Get-ItemProperty 'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionSoftwareProtectionPlatform' 就能获取。
ProduKey.exe也可以命令行查看productkey,可以搞自动化代码 接下来运行代码
≤2012R2 的系统,cmd,注意是cmd不是powershell,在cmd命令行来运行如下命令:
certutil -urlcache -split -f http://www.nirsoft.net/utils/produkey-x64.zip "c:produkey.zip"
certutil -urlcache -split -f http://windows-1251783334.cos.ap-shanghai.myzijiebao.com/7z1900-x64.msi "c:7z1900.msi"
certutil -urlcache -split -f http://windows-1251783334.cos.ap-shanghai.myzijiebao.com/sleep.exe "c:sleep.exe"
msiexec.exe /i c:7z1900.msi /qn
c:sleep.exe 15
mkdir c:produkey
"C:Program Files7-Zip7z.exe" x -aoa c:produkey.zip -oc:produkey
cd c:produkey
produkey.exe /stext > c:prd.txt && notepad c:prd.txt
≥2012R2 的系统,运行powershell ise,在ise里粘贴如下命令:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
invoke-webrequest "http://www.nirsoft.net/utils/produkey-x64.zip" -outfile "C:produkey.zip"
#invoke-webrequest "http://windows-1251783334.cos.ap-shanghai.myzijiebao.com/7z1900-x64.msi" -outfile "c:7z1900.msi"
invoke-webrequest "http://www.7-zip.org/a/7z1900-x64.msi" -outfile "c:7z1900.msi"
msiexec.exe /i c:7z1900.msi /qn
Start-Sleep 15
mkdir c:produkey -force
& "$env:ProgramFiles7-Zip7z.exe" x -aoa c:produkey.zip -oc:produkey
cmd /c 'c:produkeyprodukey.exe /stext > c:prd.txt';notepad c:prd.txt
代码为啥区分系统版本?
①因为certutil -urlcache -split -f 这种命令在≥server2016的系统上会默认被windows defender拦截,而invoke-webrequest 却不会被拦截。
②cmd和powershell在7z.exe解压.zip文件的代码上有差别,powershell要在前面加&,
-aoa代表覆盖,用法介绍里有一句:-ao{a|s|t|u} : set Overwrite mode
③cmd没有sleep命令,所以下载了一个,这个sleep命令原本是微软自己的,早年的windows rktools是微软提供的一组windows server 管理员工具包,里面有sleep.exe、now.exe等命令,我测试在WinAll上能运行。
④powershell加Tls12那句是因为https://cloud.tencent.com/developer/article/1885847
总之,windows代码兼容性要强,需要兼顾的太多了。这里写这个文档主要是为了做个笔记,记住一些关键语法的差异。