使用 (IF ELSE) 检查 TPM 制造商版本的 Powershell 脚本

Powershell script to check TPM Manufacturer Version with (IF ELSE)

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

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

我意识到 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"
    }

enter image description here

您正在比较字符串,而不是 'versions'。如果您只是检查简单的相等性,那么使用直接字符串比较将执行:

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

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

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

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

$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"} { '..62 downgrade.cmd'}
    {$_ -eq [Version]"7.61"} { '..61 downgrade.cmd'}
    {$_ -eq [Version]"7.60"} { '..60 downgrade.cmd'}
    {$_ -eq [Version]"7.41"} { '..41 downgrade.cmd'}
    {$_ -eq [Version]"7.40"} { '..40 downgrade.cmd'}
    default {"Unable to find downgrade BIN for your firmware version"}
}

试试这个

$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"
}

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

$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"){
& '..62 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.61"){
& '..61 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.60"){
& '..60 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.41"){
& '..41 downgrade.cmd'
}elseif ([Version]$tmp.ManufacturerVersion -eq [Version]"7.40"){
& '..40 downgrade.cmd'
}else{
Write-Host "Unable to find downgrade BIN for your firmware version"
}