Был сервер, когда-то подключенный к домену, возможно, SQL-сервер имеет старый ВХОД В СИСТЕМУ, который связан с пользователем домена.
Если Вы не можете найти очевидное пользовательское соединение, попытайтесь отключить пользователей по одному, пока Вы больше не можете соединиться с SQL-сервером с помощью аутентификации Windows.
Я видел поведение с переименованными учетными записями пользователей, где они поддерживают свои старые отношения, потому что SID никогда не изменялся, просто имя пользователя.
Это смотрит на меня как, у Вас есть больше чем один продукт, возвращаемый Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_.GetValue("DisplayName") -like "Microsoft Security Essentials" }
cmdlet и Ваш сценарий это падение, потому что это только ожидает тот.
Попробуйте этот измененный сценарий, какие циклы по каждому возвращенному объекту и выполняет команду удаления для продукта. Я также изменился /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
действительно a string
? В противном случае Вы, возможно, должны бросить его, чтобы быть a string
. Кроме того, я не думаю, что это null
, но можно хотеть проверить, что это содержит то, что Вы думаете, что это делает после того первого шага.
@ECHO OFF
CLS
C:
CD\
CD Program Files\Microsoft Security Client
setup.exe /x /s
EXIT
Это работает над клиентами XP, не протестировали на Win7, но поскольку это - просто сценарий пакетной обработки, это должно быть прекрасным. Обязательный "Настолько легкий $BRAINDEADBIPED мог сделать это!" здесь.