Назад | Перейти на главную страницу

Программное удаление антивируса MSFT Security Essentials с компьютеров XP и Win7

Мне нужен способ удалить MSFT Security Essentials, чтобы я мог установить Forefront на клиентах. Я бы предпочел сценарий входа в систему, который передавал бы учетные данные администратора для удаления программы. Если это невозможно, то приемлем сценарий, который я могу запустить во время загрузки.

У меня есть следующий сценарий PS, который кто-то предоставил из Интернета, но при его запуске я получаю сообщение об ошибке.

$UninstallString = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } | ForEach-Object -Process {$_.GetValue("UninstallString") }
$uninstallCmd=$UninstallString.split('/')[0].Trim() 
$uninstallParam='/' + $UninstallString.split('/')[1].Trim()
$uninstallParamSilent="/s"
& $uninstallCmd $uninstallParam $uninstallParamSilent

При запуске как есть (хотя я знаю, что это выглядит неправильно) я получаю следующую ошибку:

Method invocation failed because [System.Object[]] doesn't contain a method named 'split'.
At C:\Users\administrator\Desktop\remove Security essentials.ps1:2 char:37
+ $uninstallCmd=$UninstallString.split <<<< ('/')[0].Trim()
    + CategoryInfo          : InvalidOperation: (split:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Method invocation failed because [System.Object[]] doesn't contain a method named 'split'.
At C:\Users\administrator\Desktop\remove Security essentials.ps1:3 char:45
+ $uninstallParam='/' + $UninstallString.split <<<< ('/')[1].Trim()
    + CategoryInfo          : InvalidOperation: (split:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

The expression after '&' in a pipeline element produced an invalid object. It must result in a command name, script blo
ck or CommandInfo object.
At C:\Users\administrator\Desktop\remove Security essentials.ps1:5 char:2
+ & <<<<  $uninstallCmd $uninstallParam $uninstallParamSilent
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

Перемещение последней строки в предыдущую также приводит к ошибке:

Unexpected token '&' in expression or statement.
At C:\Users\administrator\Desktop\remove Security essentials.ps1:4 char:29
+ $uninstallParamSilent="/s" & <<<<  $uninstallCmd $uninstallParam $uninstallParamSilent
    + CategoryInfo          : ParserError: (&:String) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

Я недостаточно знаю о PS, чтобы увидеть, где код неправильный, но любая помощь будет принята с благодарностью.

Кроме того, если у кого-то есть что-то, что будет работать с этим как на XP, так и на Win7, без необходимости устанавливать PS на машины XP, это тоже было бы здорово.

Мне кажется, что у вас есть более одного продукта, возвращаемого Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } командлет, и ваш скрипт упадет, потому что он ожидает только одного.

Попробуйте этот модифицированный сценарий, который перебирает каждый возвращенный объект и выполняет команду удаления продукта. Я также изменил /s включить msiexec к /quiet поскольку это выглядит совместимым с другими версиями Windows.

$UninstallString = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } | ForEach-Object -Process {$_.GetValue("UninstallString") }

foreach($ThisProduct in $UninstallString)
{
    $UninstallCmd = $ThisProduct.split('/')[0].Trim() 
    $UninstallParam = '/' + $ThisProduct.split('/')[1].Trim()
    $UninstallParamQuiet = "/quiet"

    & $UninstallCmd $UninstallParam $UninstallParamQuiet
}

Отказ от ответственности: этот ответ приходит после ужасно много вперед и назад в чате, чтобы определить реальную проблему, заключающуюся в том, что одна из команд PowerShell возвращает более одного элемента.

Является $UninstallString действительно string? В противном случае вам может потребоваться преобразовать его в string. Кроме того, я не считать что это null, но вы можете убедиться, что он содержит то, что, по вашему мнению, делает после этого первого шага.

@ECHO OFF

CLS

C:

CD\

CD Program Files\Microsoft Security Client

setup.exe /x /s



EXIT

Это работает на клиентах XP, не тестировалось на Win7, но поскольку это всего лишь пакетный сценарий, все должно быть в порядке. Обязательно: "Так просто $ BRAINDEADBIPED может сделать это!" Вот.