Скрипт Powershell для проверки версии изготовителя TPM (IF ELSE) - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь понизить TPM на нескольких ноутбуках HP. Я пытаюсь создать скрипт 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"
    }

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Попробуйте это

$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"
}
0 голосов
/ 29 июня 2018

Спасибо всем за ваши отзывы и помощь. Это конечный продукт, и он отлично работает.

$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"
}
0 голосов
/ 29 июня 2018

Вы сравниваете строки, а не «версии». Если вы проверяете только на простое равенство, тогда прямое сравнение строк сделает:

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