HOW TO MANAGE SQL SERVER 2000 Services USING WMI
There are quite a few blog posts out there to manage SQL Server 2005 services using the :\\.\root\Microsoft\SqlServer\ComputerManagement\
However, WMI Admin Provider is not pre-installed for SQL Server 2000. It needs to be installed separately using the WMI Admin Provider Setup available along with the SQL Server 2000 Setup CD under x86\other\wmi folder.
Reference
======
Sample script to change SQL Server 2005 service startup account and password using WMI:
https://blogs.msdn.com/mwories/archive/2006/11/03/wmi_5F00_change_5F00_password.aspx
MSDN Documentation on Win32_Service class
https://msdn.microsoft.com/en-us/library/aa394418.aspx
Sample Script to change a SQL Server 2000 instance startup account using root\MicrosoftSQLServer namespace:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftSQLServer")
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_Service.Name='MSSQL$SQL2000'")
' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("Change"). _ inParameters.SpawnInstance_()
' Add the input parameters.
objInParam.Properties_.Item("StartName") = "LocalSystem"
objInParam.Properties_.Item("StartPassword") = ""
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_Service.Name='MSSQL$SQL2000'", "Change", objInParam)
' List OutParams
Wscript.Echo "Out Parameters: "Wscript.echo "ReturnValue: " & objOutParams.ReturnValue
The script above changes the Startup Account of an instance called SQL2000. For changing the startup account of a default instance, we need to make the following change:
Win32_Service.Name = MSSQLServer
For a named instance, you would change it to:
Win32_Service.Name = MSSQL$<instance name>
Where <instance name> = Name of the SQL 2000 named instance
The other parameters of interest are:
objInParam.Properties_.Item("StartName")
The above parameter holds the new Startup Account
objInParam.Properties_.Item("StartPassword")
The above parameter holds the password.
If you had to change it to Local System or Network Service, then you don’t need to provide a value for StartPassword parameter.
NOTE: This should be done when there is no other option. The best way to change the startup account in SQL Server 2000 is to use Enterprise Manager.
Amit Banerjee
Technical Lead, Microsoft Sql Server
Comments
Anonymous
August 11, 2009
This script is for one instance @ a time . and if there is only one instance or a few we can do it manually .In reality there are many servers .Is there a way to change the passwords for a set of SQL Servers in a domain !! Regards AbhayAnonymous
August 11, 2009
SQL Server 2000 doesn't have WMI provider installed by default. The two methods to do this are:
- UDP Broadcast which is similar to osql -L
- Using SMO & WMI Option 1 has the following downsides:
- Doesn't work when there's no network connection
- Depends on what kind of firewall rules are set
- Doesn't find SQL Servers if SQL Browser is off
- Doesn't find SQL Servers if they are hidden
- List contents not guaranteed to be repeatable because the servers need to respond within a timeout period Option 2 has the following downsides:
- Only lists SQL Server 2005 and later
- Only finds registered servers If you want to use this for SQL Server 2000, then you would have to keep an array of SQL Server instances installed on your network. This array can be iterated through in VB in another script which calls this script. This script can be modified to take an input parameter which is the service name or instance name. For examples on how VBScript can take in parameters, refer the attached script on http://blogs.msdn.com/sqlserverfaq/archive/2009/08/11/how-to-change-the-ip-all-tcp-port-to-a-static-port-from-a-dynamic-port-using-wmi.aspx
Anonymous
March 08, 2010
I need to see the 2000 namespace in wmimgmt.msc. I did run E:SQL 2000Enterprisex86otherwmiSQLWMI80.msi . But I cannot see the SQL Server 2000 in the list of namespaces ... Regards AbhayAnonymous
March 16, 2010
Hi Abhay, This is not directly possible. You would have to use DMO along with WMI to achieve that. The WMI Admin Provider documentation for SQL Server has that information. Thanks.