0

我正在尝试在几台 HP 笔记本电脑上降级 TPM。我正在尝试创建一个 powershell 脚本,它将获取 TPM 制造商版本号,并根据可能的数字列表检查该数字。一旦它与其中一个数字匹配,就执行程序以降级 TPM 版本。

我首先将输出放入变量中,并尝试根据静态数字检查变量以启动正确的程序。该变量已存储,但当我尝试根据“7.61”检查它时,它似乎并没有真正检查结果。7.61 的结果没有返回“成功”

我意识到 powershell 是不同的,我的 IF ELSE 语句可能已经过时了。任何帮助将不胜感激!

假设 TPM 制造商版本为 7.61

    $variable = get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_Tpm | Select-Object ManufacturerVersion | Out-String

    if($variable -eq "8"){
    Write-Host "success"
    }else{
    Write-Host "Fail"
    }

在此处输入图像描述

4

3 回答 3

0

试试这个

$variable = get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_Tpm | Select-Object ManufacturerVersion

if($variable.ManufacturerVersion -eq "8"){
Write-Host "success"
}else{
Write-Host "Fail"
}
于 2018-06-29T15:15:33.217 回答
0

您正在比较字符串,而不是“版本”。如果您只检查简单的相等性,那么使用直接字符串比较就可以了:

PS C:\> "10.5" -eq "10.5"
True

但是,如果您想确定一个版本是否大于另一个版本,则字符串将不起作用。例如:

PS C:\> "100.5" -gt "55.3"
False

在这种情况下,您应该将版本字符串转换为实际的版本类型,然后比较将正常工作。例如:

$tmp = Get-WmiObject -Namespace "root\cimv2\security\microsofttpm" -Class Win32_TPM

if ([Version]$tmp.ManufacturerVersion -eq [Version]"8.0")
{
    "Success"
}
else
{
    "Fail"
}

此外,如果您需要将 TPM 版本与多种可能性进行比较,那么 switch 语句会使代码更简洁:

$tmp = Get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_TPM 
Set-Location "C:\Users\ADministrator\Desktop\TPM Downgrade"

switch([Version]$tmp.ManufacturerVersion)
{
    {$_ -eq [Version]"7.62"} { '.\7.62 downgrade.cmd'}
    {$_ -eq [Version]"7.61"} { '.\7.61 downgrade.cmd'}
    {$_ -eq [Version]"7.60"} { '.\7.60 downgrade.cmd'}
    {$_ -eq [Version]"7.41"} { '.\7.41 downgrade.cmd'}
    {$_ -eq [Version]"7.40"} { '.\7.40 downgrade.cmd'}
    default {"Unable to find downgrade BIN for your firmware version"}
}
于 2018-06-29T15:12:54.647 回答
0

感谢大家的反馈和帮助。这是最终产品,效果很好。

$tmp = get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_TPM 
Set-Location "C:\Users\ADministrator\Desktop\TPM Downgrade"

if ([Version]$tmp.ManufacturerVersion -eq [Version]"7.62"){
& '.\7.62 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.61"){
& '.\7.61 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.60"){
& '.\7.60 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.41"){
& '.\7.41 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.40"){
& '.\7.40 downgrade.cmd'
}else{
Write-Host "Unable to find downgrade BIN for your firmware version"
}
于 2018-06-29T19:06:51.770 回答