以编程方式从 XP 和 Win7 计算机中删除 MSFT Security Essentials Anti-Virus

以编程方式从 XP 和 Win7 计算机中删除 MSFT Security Essentials Anti-Virus

我需要一种方法来删除 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 上运行的东西,而无需在 XP 机器上安装 PS,那就太好了。

答案1

在我看来,cmdlet 返回了多个产品Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" },而您的脚本却失败了,因为它只需要一个。

尝试这个修改后的脚本,它循环遍历每个返回的对象并执行产品的卸载命令。我还将开关更改/smsiexec/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 命令返回了多个项目。

答案2

$UninstallString确实是string?如果不是,你可能需要将其转换为string。另外,我不知道思考是的null,但是您可能想验证它是否包含您认为在第一步之后它所做的事情。

答案3

@ECHO OFF

CLS

C:

CD\

CD Program Files\Microsoft Security Client

setup.exe /x /s



EXIT

这在 XP 客户端上有效,尚未在 Win7 上测试过,但由于这只是一个批处理脚本,所以应该没问题。这里必须说“太简单了,一个 $BRAINDEADBIPED 就能做到!”

相关内容