彻底删除SQL Server注册表的方法

1. 前言

SQL Server是一个重要的数据库管理系统,由于各种原因可能需要卸载重新安装或者彻底删除,但是仅仅卸载掉SQL Server并不足以实现彻底卸载或者删除。因为SQL Server和Windows系统是密切相关的,只卸载 SQL Server 并不能删除与其相关的注册表项、服务、用户和组等信息。因此,本文将介绍如何在 Windows 系统中彻底删除 SQL Server 的注册表项,包括服务、密码、组、实例名等等。

2. 删除SQL Server注册表

2.1. 手动删除

手动删除就是依次去删除 SQL Server 相关的注册表项,直到全部删完,可以采用下面的方式:

查找 SQL Server 所在的注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

删除 SQL Server 所在的注册表表项

查找 SQL Server 的实例名:在注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL 中,查找 SQL Server 所安装的所有实例名,删除之

查找 SQL Server 的服务名,在注册表键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 中查找所有 SQL Server 服务名,删除所有有关项

删除 SQL Server 和 Windows 用户组的关联项,在注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList 中,在这个路径下如果没有 SQL 相关用户则不需要操作,有则删除。

虽然可以手动删除,但是手动删除繁琐且容易出错,不适合大规模、重复性删除操作。本文后续将介绍如何使用PowerShell脚本自动删除。

2.2. PowerShell脚本删除

使用 PowerShell 脚本可以实现自动删除 SQL Server 注册表项。下面提供一个简单的脚本:

#定义函数

function uninstall-SQLServer($InstanceName){

#删除服务

get-service -Name MSSQL\$InstanceName\* | stop-service

get-service -Name MSSQL\$InstanceName\* | remove-service

#删除注册表键

$reg_keyMSSQL = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server"

if(Test-Path $reg_keyMSSQL){

Remove-Item $reg_keyMSSQL -recurse -force

}

#删除实例名

$reg_keyInstanceName = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"

if(Test-Path $reg_keyInstanceName){

$instanceList = Get-ChildItem -Path $reg_keyInstanceName

foreach($instance in $instanceList){

Remove-Item "$reg_keyInstanceName\$($instance.PSChildName)" -recurse -force

}

}

#删除注册表服务

$reg_keySQLServer = "HKLM:\SYSTEM\CurrentControlSet\Services"

if(Test-Path $reg_keySQLServer){

$services = Get-ChildItem -Path $reg_keySQLServer | where{$_.PSChildName -like "MSSQL`*$InstanceName*"}

foreach($service in $services){

$serviceName = $service.PSChildName

Stop-Service $serviceName -Force

Remove-Item "$reg_keySQLServer\$serviceName" -recurse -force

}

}

#删除系统组

$reg_keyGroups = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList\"

if(Test-Path $reg_keyGroups){

$groups = Get-ChildItem -Path $reg_keyGroups | where{$_.PSChildName -like "MSSQL`*$InstanceName*"}

foreach($group in $groups){

Remove-Item "$reg_keyGroups\$($group.PSChildName)" -recurse -force

}

}

}

#卸载指定实例

uninstall-SQLServer "InstanceName"

使用上述脚本之前,需要先安装好 PowerShell 版本,对于 Windows 7, 安装方法是下载 Windows Management Framework 3.0。安装 PowerShell 4.0 或 5.0 对应的WMF就行,这样就可以使用 PowerShell 命令行进行注册表项删除操作了,使用方法见上面的代码注释。

2.3. 总结

本文介绍了手动删除 SQL Server 注册表项的方法以及使用 PowerShell 自动删除的方法。手动删除繁琐且容易出错,不适合大规模、重复性删除操作,建议使用 PowerShell 脚本进行自动删除。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签