使用 PowerShell 远程更改 Windows 产品密钥
Posted
技术标签:
【中文标题】使用 PowerShell 远程更改 Windows 产品密钥【英文标题】:Change a Windows product key remotely with PowerShell 【发布时间】:2021-05-14 01:03:03 【问题描述】:我正在尝试在远程服务器上安装/激活 MAK 密钥。它们都启用了 RemotePS 并设置了防火墙例外规则。
$Results = Invoke-Command -ComputerName Server1
$Props = @ComputerName = $env:ComputerName
slmgr.vbs /ipk "12345-12345-12345-12345-12345"
$LicStatus = slmgr.vbs /dlv
$Props.Add('LicenseStatus',$LicStatus)
New-Object -TypeName PSObject -Property $Props
$Results | Select-Object ComputerName,LicenseStatus
上面确实安装了 MAK 密钥,但我没有得到任何确认这个过程,这就是为什么我尝试添加许可证检查选项 (/dlv) 但在 LicenseStatus 字段中没有返回任何内容。我假设这是因为它可能返回一个多值!?
最终,我只是想确认已安装密钥。那里有关于使用 RemotePS 执行此操作的文章,但他们都说每台计算机都会返回一条通知消息,根据我的经验,情况并非如此:https://4sysops.com/archives/change-a-product-key-remotely-with-powershell/
有什么办法可以检查吗?
【问题讨论】:
【参考方案1】:我会使用 Cscript.exe 调用 slmgr.vbs 脚本,以便将结果作为字符串数组获取。否则系统将默认使用 Wscript.exe,它旨在将所有内容输出到消息框中。
不幸的是,slmgr 的所有输出都是本地化的,因此在 LicenseStatus 上使用正则表达式或其他东西是不行的(在荷兰 NL 机器上它读取为“Licentiestatus”)
您可以做的是使用开关/dli
,因为它返回一个字符串数组,其中最后一个(非空)值具有状态。
试试
$Results = Invoke-Command -ComputerName Server1
# install MAK key
$null = cscript.exe "$env:SystemRoot\System32\slmgr.vbs" /ipk "12345-12345-12345-12345-12345"
# test LicenseStatus
$LicStatus = (((cscript.exe "$env:SystemRoot\System32\slmgr.vbs" /dli) |
Where-Object $_ -match '\S' )[-1] -split ':', 2)[1].Trim()
# return an object
[PsCustomObject]@
ComputerName = $env:COMPUTERNAME
LicenseStatus = $LicStatus
$Results
【讨论】:
谢谢 Theo,这解释了很多。看起来它可以帮助确认更改,但目前它正在返回主许可证的许可证状态,而不是 ESU 第 2 年附加许可证。我会试一试,看看我能做些什么来操纵它。 其实,忽略它。只需在 /dli 开关过滤器后将激活 ID 添加到正确的许可证。现在工作正常。干杯以上是关于使用 PowerShell 远程更改 Windows 产品密钥的主要内容,如果未能解决你的问题,请参考以下文章
win2012如何允许PowerShell远程连接到本机 有图
目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在