我正在尝试降级几台HP笔记本电脑上的TPM。我正在尝试创建一个 powershell 脚本,该脚本将获取 TPM 制造商版本号,并根据可能的数字列表检查该数字。一旦它匹配这些数字之一,请执行程序以降级TPM版本。
我首先将输出扔到一个变量中,并尝试根据静态数字检查变量以启动正确的程序。变量已存储,但是当我尝试将其与"7.61"进行检查时,它似乎并没有实际检查结果。7.61 的结果不返回"成功">
我意识到Powershell是不同的,我的IF ELSE语句可能已经过时了。任何帮助将不胜感激!
假设 TPM 制造商版本为 7.61
$variable = get-WmiObject -Namespace rootcimv2securitymicrosofttpm -Class Win32_Tpm | Select-Object ManufacturerVersion | Out-String
if($variable -eq "8"){
Write-Host "success"
}else{
Write-Host "Fail"
}
在此处输入图像描述
您正在比较字符串,而不是"版本"。 如果您只检查简单相等性,那么使用直接字符串比较就可以了:
PS C:> "10.5" -eq "10.5"
True
但是,如果要确定一个版本是否大于另一个版本,则字符串将不起作用。 例如:
PS C:> "100.5" -gt "55.3"
False
在这种情况下,您应该将版本字符串强制转换为实际的版本类型,然后比较将正常工作。 例如:
$tmp = Get-WmiObject -Namespace "rootcimv2securitymicrosofttpm" -Class Win32_TPM
if ([Version]$tmp.ManufacturerVersion -eq [Version]"8.0")
{
"Success"
}
else
{
"Fail"
}
此外,如果您需要将 TPM 版本与多种可能性进行比较,则 switch 语句可以生成更整洁的代码:
$tmp = Get-WmiObject -Namespace rootcimv2securitymicrosofttpm -Class Win32_TPM
Set-Location "C:UsersADministratorDesktopTPM 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"}
}
试试这个
$variable = get-WmiObject -Namespace rootcimv2securitymicrosofttpm -Class Win32_Tpm | Select-Object ManufacturerVersion
if($variable.ManufacturerVersion -eq "8"){
Write-Host "success"
}else{
Write-Host "Fail"
}
感谢大家的反馈和帮助。这是最终产品,效果很好。
$tmp = get-WmiObject -Namespace rootcimv2securitymicrosofttpm -Class Win32_TPM
Set-Location "C:UsersADministratorDesktopTPM 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"
}