Я пытаюсь понять метод .uninstall()
.
С по этой ссылке похоже, что метод .uninstall()
работает только при использовании с Get-WmiObject -Class Win32_Product
.Но это означает, что он будет рассматривать только 32-разрядное программное обеспечение, а не 64-разрядное.
Поэтому я написал несколько строк, чтобы удалить Erlang, который является 64-разрядным:
# Check if a Software ins installed
function Check_Program_Installed($programName) {
$x86_check = ((Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall") |
Get-ItemProperty |
Where-Object {$_.DisplayName -like "*$programName*" } |
Select-Object -Property DisplayName, UninstallString) |
Format-Table
if (Test-Path 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall') {
$x64_check = ((Get-ChildItem "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall") | Get-ItemProperty | Where-Object {$_.DisplayName -like "*$programName*" } | Select-Object -Property DisplayName, UninstallString) | Format-Table
}
if ($x86_check -and $x64_check -eq $null) {
Write-Host "$programName is not installed on this computer" -ForegroundColor Green
#continue
} elseif ($x86_check -or $x64_check -ne $null) {
Write-Host "On this computer is installed " -ForegroundColor Red
$x86_check
$x64_check
$x86_check.uninstall()
$x64_check.uninstall()
}
}
# Erlang check
Write-Host "Checking if Erlang exist " -NoNewline
Check_Program_Installed("Erlang")
Write-Host "The End: the script ends here" -ForegroundColor Yellow
но, к сожалению, он возвращает мне ошибку:
Вы не можете вызвать метод для выражения с нулевым значением.В C: \ Users \ Admin \ Desktop \ test.ps1: 17 char: 3 + $ x86_check.uninstall () + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull
Ошибка вызова метода, поскольку [Microsoft.PowerShell.Commands.Internal.Format.FormatStartData] не содержит метод с именем «Удалить».В C: \ Users \ Admin \ Desktop \ test.ps1: 18 char: 3 + $ x64_check.uninstall () + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound
Я полагаю, что основной причиной этого являются DisplayName
и UninstallString
в переменной, верно?
Выход, который я нашел, - это использовать:
'"C:\Program Files\erl8.3\Uninstall.exe'" | cmd
для удаления, но для этого не используется метод .uninstall()
, который я хочу использовать.
Говорит ли Microsoftчто вы можете использовать .uninstall()
только с 32-битной архитектурой, а для 64-битной вам нужно найти свой выход?
Если это так, то это довольно элементарно