使用 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 任务,在远程服务器中更改执行策略后安全警告仍然存在

Powershell 更改高级系统属性

如何通过powershell或C#使用本地IP远程更新azure SQL防火墙

用于远程保持计算机唤醒的 Powershell 脚本

window脚本代码不执行下一步