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

时间:2018-06-29 14:58:00

标签: powershell tpm

我正在尝试将多台HP笔记本电脑的TPM降级。我正在尝试创建一个Powershell脚本,该脚本将获取TPM制造商版本号,并对照可能的编号列表检查该编号。一旦与这些数字之一匹配,请执行程序以降级TPM版本。

我首先将输出放入变量中,然后尝试根据静态数字检查变量以启动正确的程序。该变量已存储,但是当我尝试针对“ 7.61”对其进行检查时,它似乎实际上并未检查结果。 7.61的结果未返回“成功”

我意识到powershell有所不同,我的IF ELSE语句可能刚刚过时。任何帮助将不胜感激!

假设TPM ManufacturerVersion为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

3 个答案:

答案 0 :(得分:0)

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

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"} { '.\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"}
}

答案 1 :(得分: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"
}

答案 2 :(得分:0)

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

julia