以编程方式从XP和Win7机器中删除MSFT Security Essentials反病毒软件

我需要一种方法来删除MSFT Security Essentials,以便我可以在客户端上安装Forefront。 我宁愿一个login脚本,将通过pipe理员凭据删除程序。 如果这是不可能的,那么我可以在启动时运行一个脚本是可以接受的。

我有以下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上都可以使用这个function,而不必在XP机器上安装PS,那也是非常棒的。

它看起来像你有一个以上的产品被Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" }返回Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } cmdlet的Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" } ,以及您的脚本因为它只能期待一个而失败。

试试这个修改后的脚本,它循环每个返回的对象并执行产品的卸载命令。 我也将msiexec上的/s开关更改为/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 ,但你可能想要validation它包含你认为它在第一步之后。

 @ECHO OFF CLS C: CD\ CD Program Files\Microsoft Security Client setup.exe /x /s EXIT 

这在XP客户端上工作,没有在Win7上testing,但因为它只是一个批处理脚本,应该没问题。 强制性的“简单的$ BRAINDEADBIPED就可以做到!” 这里。