使用 PowerShell 远程更改 Windows 产品密钥
Change a Windows product key remotely with PowerShell
我正在尝试 install/activate 远程服务器上的 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 字段中没有返回任何内容的原因。我假设这是因为它 returns 可能是一个多值!?
最终我只是想确认密钥已安装。那里有关于使用 RemotePS 执行此操作的文章,但他们都说会为每台计算机返回一条通知消息,而根据我的经验,情况并非如此:https://4sysops.com/archives/change-a-product-key-remotely-with-powershell/
有什么办法可以检查吗?
我会使用 Cscript.exe 调用 slmgr.vbs 脚本,以便将结果作为字符串数组获取。否则系统将默认使用 Wscript.exe,它旨在将所有内容输出到消息框中。
不幸的是,slmgr 的所有输出都是本地化的,因此在 LicenseStatus 上使用正则表达式或其他东西是不行的(在荷兰 NL 机器上它读取 'Licentiestatus')
您 可以 做的是使用开关 /dli
,因为 returns 一个字符串数组,其中最后一个(非空)值具有状态。
尝试
$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
我正在尝试 install/activate 远程服务器上的 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 字段中没有返回任何内容的原因。我假设这是因为它 returns 可能是一个多值!?
最终我只是想确认密钥已安装。那里有关于使用 RemotePS 执行此操作的文章,但他们都说会为每台计算机返回一条通知消息,而根据我的经验,情况并非如此:https://4sysops.com/archives/change-a-product-key-remotely-with-powershell/
有什么办法可以检查吗?
我会使用 Cscript.exe 调用 slmgr.vbs 脚本,以便将结果作为字符串数组获取。否则系统将默认使用 Wscript.exe,它旨在将所有内容输出到消息框中。
不幸的是,slmgr 的所有输出都是本地化的,因此在 LicenseStatus 上使用正则表达式或其他东西是不行的(在荷兰 NL 机器上它读取 'Licentiestatus')
您 可以 做的是使用开关 /dli
,因为 returns 一个字符串数组,其中最后一个(非空)值具有状态。
尝试
$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