Remover programaticamente o MSFT Security Essentials Anti-Virus das máquinas XP e Win7

2

Eu preciso de uma maneira de remover o MSFT Security Essentials para que eu possa instalar o Forefront nos clientes. Eu preferiria um script de login que passaria as credenciais de administrador para remover o programa. Se isso não for possível, um script que eu possa executar no momento da inicialização é aceitável.

Eu tenho o seguinte script PS que alguém forneceu das webs, mas recebo um erro ao executá-lo.

$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

Quando executado como está (embora eu saiba que parece errado), recebo o seguinte erro:

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

Mover a última linha para a anterior também gera um erro:

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

Eu não sei o suficiente sobre PS para ver onde o código está errado, mas qualquer ajuda seria apreciada.

Além disso, se alguém tiver algo que funcione nisso tanto no XP quanto no Win7 sem ter que instalar o PS nas máquinas XP, isso também seria ótimo.

    
por Holocryptic 05.04.2011 / 23:14

3 respostas

2

Parece-me que você tem mais de um produto sendo retornado pelo cmdlet Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } e seu script caindo porque ele espera apenas um.

Tente este script modificado que faz um loop sobre cada objeto retornado e executa o comando de desinstalação do produto. Eu também alterei a opção /s em msiexec para /quiet , já que parece ser compatível com mais versões do 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
}
Disclaimer: Esta resposta vem depois de um muito de idas e vindas no chat para determinar o problema real de que mais de um item estava sendo retornado por um dos comandos do PowerShell.

    
por 06.04.2011 / 01:07
1

$UninstallString é realmente um string ? Caso contrário, talvez seja necessário converter para string . Além disso, eu não penso que é null , mas você pode querer verificar se ele contém o que você acha que faz depois da primeira etapa.

    
por 06.04.2011 / 00:08
1
@ECHO OFF

CLS

C:

CD\

CD Program Files\Microsoft Security Client

setup.exe /x /s



EXIT

Isso funciona em clientes XP, não foi testado no Win7, mas como é apenas um script em lote, tudo bem. Obrigatório "Tão fácil um $ BRAINDEADBIPED poderia fazer isso!" aqui.

    
por 12.04.2011 / 17:45