我正在尝试将多台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"
}
答案 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