Мне нужен способ удалить 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 может сделать это!" Вот.