<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: VBScript: Enumerate All SQL Servers on a Domain</title>
	<link>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/</link>
	<description>ls /usr/lolcat</description>
	<pubDate>Wed, 20 Aug 2008 02:02:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
		<item>
		<title>By: Radski</title>
		<link>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-10311</link>
		<dc:creator>Radski</dc:creator>
		<pubDate>Thu, 07 Aug 2008 10:03:15 +0000</pubDate>
		<guid>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-10311</guid>
		<description>Another ugly hack to make this work with 2005 if you have the native client installed and to ditch the dodgy logic for default instance from the last post :)



'========================================================================
ON ERROR RESUME NEXT

Set objAdRootDSE = GetObject("LDAP://RootDSE")
Set objRS = CreateObject("adodb.recordset")
set objFS = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFS.CreateTextFile("sql_servers.txt")
Set objERRORLog = objFS.CreateTextFile("sql_servers_errors.txt")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")


Const HKEY_LOCAL_MACHINE = &#38;H80000002

varConfigNC = objAdRootDSE.Get("defaultNamingContext")
strConnstring = "Provider=ADsDSOObject"
strWQL = "SELECT * FROM 'LDAP://" &#38; varConfigNC &#38; "' WHERE objectCategory= 'Computer' and OperatingSystem = 'Windows*Server*' "

objRS.Open strWQL, strConnstring
Do until objRS.eof
	Set objServer = GetObject(objRS.Fields.Item(0))
	strServerName = objServer.CN

	Set colItems = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address = '" &#38; objServer.DNSHostName &#38; "'")
	For Each objItem in colItems
		If objItem.StatusCode = 0 Then 'The Computer is Pingable

			Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &#38; strServerName &#38; "\root\default:StdRegProv")
			strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server"
			strValueName = "InstalledInstances"
			objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,arrValues
			If IsNull(arrValues) = 0 Then 'It's a SQL Server! Enumerate it's instances

				For Each strValue In arrValues
					strMsg = strServerName &#38; vbtab &#38; strValue &#38; vbtab &#38; GetSQLServerVersion(strServerName)
					objLogFile.WriteLine strMsg
					wscript.echo strMsg
				Next

				
			End If
			Set objRegistry = Nothing
		End If
		Set objServer = Nothing
	Next
	objRS.movenext
Loop

objRS.close

Set objWMIService = Nothing
Set objRS = Nothing
Set objAdRootDSE = Nothing


'####
Function GetSQLServerVersion(serverName)

	Set cxn = Wscript.CreateObject("ADODB.Connection")
	strConn = "Driver={SQL Server};Server=" &#38; strServerName &#38; ";Database=master"
	sqlstr = "SELECT @@version"
	cxn.ConnectionString = strConn
	Err.Clear
	cxn.Open
	
	If Err.number  0 Then
		Set cxn = Wscript.CreateObject("ADODB.Connection")
		strConn = "Driver={SQL Native Client};Server=" &#38; strServerName &#38; ";Database=master"
		sqlstr = "SELECT @@version"
		cxn.ConnectionString = strConn
		cxn.Open			
	End If


	Set rs=cxn.Execute(sqlstr)
	Err.Clear
	rs.MoveFirst
	

	If Err.number  0 Then
		objERRORLog.WriteLine Err.Description
		GetSQLServerVersion = Err.Description
		ERR.Clear
	Else
		GetSQLServerVersion = rs(0).Value
	End If

	cxn.Close
	
End Function '//Function GetSQLServerVersion(serverName)</description>
		<content:encoded><![CDATA[<p>Another ugly hack to make this work with 2005 if you have the native client installed and to ditch the dodgy logic for default instance from the last post <img src='http://blog.netnerds.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>'========================================================================<br />
ON ERROR RESUME NEXT</p>
<p>Set objAdRootDSE = GetObject("LDAP://RootDSE")<br />
Set objRS = CreateObject("adodb.recordset")<br />
set objFS = CreateObject("Scripting.FileSystemObject")<br />
Set objLogFile = objFS.CreateTextFile("sql_servers.txt")<br />
Set objERRORLog = objFS.CreateTextFile("sql_servers_errors.txt")<br />
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")</p>
<p>Const HKEY_LOCAL_MACHINE = &amp;H80000002</p>
<p>varConfigNC = objAdRootDSE.Get("defaultNamingContext")<br />
strConnstring = "Provider=ADsDSOObject"<br />
strWQL = "SELECT * FROM 'LDAP://" &amp; varConfigNC &amp; "' WHERE objectCategory= 'Computer' and OperatingSystem = 'Windows*Server*' "</p>
<p>objRS.Open strWQL, strConnstring<br />
Do until objRS.eof<br />
	Set objServer = GetObject(objRS.Fields.Item(0))<br />
	strServerName = objServer.CN</p>
<p>	Set colItems = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address = '" &amp; objServer.DNSHostName &amp; "'")<br />
	For Each objItem in colItems<br />
		If objItem.StatusCode = 0 Then 'The Computer is Pingable</p>
<p>			Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; strServerName &amp; "\root\default:StdRegProv")<br />
			strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server"<br />
			strValueName = "InstalledInstances"<br />
			objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,arrValues<br />
			If IsNull(arrValues) = 0 Then 'It's a SQL Server! Enumerate it's instances</p>
<p>				For Each strValue In arrValues<br />
					strMsg = strServerName &amp; vbtab &amp; strValue &amp; vbtab &amp; GetSQLServerVersion(strServerName)<br />
					objLogFile.WriteLine strMsg<br />
					wscript.echo strMsg<br />
				Next</p>
<p>			End If<br />
			Set objRegistry = Nothing<br />
		End If<br />
		Set objServer = Nothing<br />
	Next<br />
	objRS.movenext<br />
Loop</p>
<p>objRS.close</p>
<p>Set objWMIService = Nothing<br />
Set objRS = Nothing<br />
Set objAdRootDSE = Nothing</p>
<p>'####<br />
Function GetSQLServerVersion(serverName)</p>
<p>	Set cxn = Wscript.CreateObject("ADODB.Connection")<br />
	strConn = "Driver={SQL Server};Server=" &amp; strServerName &amp; ";Database=master"<br />
	sqlstr = "SELECT @@version"<br />
	cxn.ConnectionString = strConn<br />
	Err.Clear<br />
	cxn.Open</p>
<p>	If Err.number  0 Then<br />
		Set cxn = Wscript.CreateObject("ADODB.Connection")<br />
		strConn = "Driver={SQL Native Client};Server=" &amp; strServerName &amp; ";Database=master"<br />
		sqlstr = "SELECT @@version"<br />
		cxn.ConnectionString = strConn<br />
		cxn.Open<br />
	End If</p>
<p>	Set rs=cxn.Execute(sqlstr)<br />
	Err.Clear<br />
	rs.MoveFirst</p>
<p>	If Err.number  0 Then<br />
		objERRORLog.WriteLine Err.Description<br />
		GetSQLServerVersion = Err.Description<br />
		ERR.Clear<br />
	Else<br />
		GetSQLServerVersion = rs(0).Value<br />
	End If</p>
<p>	cxn.Close</p>
<p>End Function '//Function GetSQLServerVersion(serverName)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg</title>
		<link>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-10167</link>
		<dc:creator>Greg</dc:creator>
		<pubDate>Thu, 15 May 2008 17:19:36 +0000</pubDate>
		<guid>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-10167</guid>
		<description>Here's a slight modification - This script will query the SQL server for it's version. Also, creates an error file and an output file (this is all hack, nuthin' fancy
'****************************************************************************
' This script created by Chrissy LeMaire (clemaire@gmail.com)
' Website: http://netnerds.net/
'
' Modified by Gregory Jones (greg@fuzsh.com)
'
' This script finds all SQL Servers and their instances and their version that are members of an AD domain
' and running any Windows Server version
'
' Run this script with admin privs on any computer within a domain
'
' This script has only been tested on Windows Server 2003
'
' "What it does"
' 1. Gathers all machines in a domain that are running a Windows Server OS (NT, 2000, 2003)
' 2. Pings them to see if they are available
' 3. If they do respond to pings, it checks their registry to see if they have the proper SQL keys
' 4. If the key does exist, it then enumerates the instances (including default)
'
' NO WARRANTIES, USE THIS AT YOUR OWN RISK, etc.
'*****************************************************************************
========================================================================
ON ERROR RESUME NEXT


Set objAdRootDSE = GetObject("LDAP://RootDSE")
Set objRS = CreateObject("adodb.recordset")
set objFS = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFS.CreateTextFile("sql_servers.txt")
Set objERRORLog = objFS.CreateTextFile("sql_servers_errors.txt")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Const HKEY_LOCAL_MACHINE = &#38;H80000002
 
  varConfigNC = objAdRootDSE.Get("defaultNamingContext")
  strConnstring = "Provider=ADsDSOObject"
  strWQL = "SELECT * FROM 'LDAP://" &#38; varConfigNC &#38; "' WHERE objectCategory= 'Computer' and OperatingSystem = 'Windows*Server*' "
  objRS.Open strWQL, strConnstring
      Do until objRS.eof
         Set objServer = GetObject(objRS.Fields.Item(0))
          strServerName = objServer.CN
 
          Set colItems = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address = '" &#38; objServer.DNSHostName &#38; "'")
          For Each objItem in colItems
              If objItem.StatusCode = 0 Then 'The Computer is Pingable
		    
                    Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &#38; strServerName &#38; "\root\default:StdRegProv")
                      strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server"
                      strValueName = "InstalledInstances"
                      objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,arrValues
                        If IsNull(arrValues) = 0 Then 'It's a SQL Server! Enumerate it's instances
			  
                          strMsg = strServerName &#38; " is running the following SQL Instance(s): "
                          For Each strValue In arrValues
                              If strValue = "MSSQLSERVER" Then strValue = "Default Instance"
                                strMsg = strServerName &#38; vbtab &#38; strValue &#38; vbtab &#38; GetSQLServerVersion(strServerName)
                          Next
			  
                          objLogFile.WriteLine strMsg
                          wscript.echo strMsg
			End If
                     Set objRegistry = Nothing
              End If
          Set objServer = Nothing
      Next
    objRS.movenext
    Loop
  objRS.close
 
Set objWMIService = Nothing
Set objRS = Nothing
Set objAdRootDSE = Nothing

Function GetSQLServerVersion(serverName)

		Set cxn = Wscript.CreateObject("ADODB.Connection")
		strConn = "Driver={SQL Server};Server=" &#38; strServerName &#38; ";Database=master"
		sqlstr  = "SELECT @@version"
		cxn.ConnectionString = strConn
		cxn.Open
		Set rs=cxn.Execute(sqlstr)		
		
		rs.MoveFirst
		
		If ERR  0 Then

			objERRORLog.WriteLine Err.Description
			GetSQLServerVersion = Err.Description
			ERR.Clear
		Else
			GetSQLServerVersion = rs(0).Value

		End If
		
		cxn.Close

End Function '//Function GetSQLServerVersion(serverName)</description>
		<content:encoded><![CDATA[<p>Here's a slight modification - This script will query the SQL server for it's version. Also, creates an error file and an output file (this is all hack, nuthin' fancy<br />
'****************************************************************************<br />
' This script created by Chrissy LeMaire (clemaire@gmail.com)<br />
' Website: <a href="http://netnerds.net/" rel="nofollow">http://netnerds.net/</a><br />
'<br />
' Modified by Gregory Jones (greg@fuzsh.com)<br />
'<br />
' This script finds all SQL Servers and their instances and their version that are members of an AD domain<br />
' and running any Windows Server version<br />
'<br />
' Run this script with admin privs on any computer within a domain<br />
'<br />
' This script has only been tested on Windows Server 2003<br />
'<br />
' "What it does"<br />
' 1. Gathers all machines in a domain that are running a Windows Server OS (NT, 2000, 2003)<br />
' 2. Pings them to see if they are available<br />
' 3. If they do respond to pings, it checks their registry to see if they have the proper SQL keys<br />
' 4. If the key does exist, it then enumerates the instances (including default)<br />
'<br />
' NO WARRANTIES, USE THIS AT YOUR OWN RISK, etc.<br />
'*****************************************************************************<br />
========================================================================<br />
ON ERROR RESUME NEXT</p>
<p>Set objAdRootDSE = GetObject("LDAP://RootDSE")<br />
Set objRS = CreateObject("adodb.recordset")<br />
set objFS = CreateObject("Scripting.FileSystemObject")<br />
Set objLogFile = objFS.CreateTextFile("sql_servers.txt")<br />
Set objERRORLog = objFS.CreateTextFile("sql_servers_errors.txt")<br />
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")</p>
<p>Const HKEY_LOCAL_MACHINE = &amp;H80000002</p>
<p>  varConfigNC = objAdRootDSE.Get("defaultNamingContext")<br />
  strConnstring = "Provider=ADsDSOObject"<br />
  strWQL = "SELECT * FROM 'LDAP://" &amp; varConfigNC &amp; "' WHERE objectCategory= 'Computer' and OperatingSystem = 'Windows*Server*' "<br />
  objRS.Open strWQL, strConnstring<br />
      Do until objRS.eof<br />
         Set objServer = GetObject(objRS.Fields.Item(0))<br />
          strServerName = objServer.CN</p>
<p>          Set colItems = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address = '" &amp; objServer.DNSHostName &amp; "'")<br />
          For Each objItem in colItems<br />
              If objItem.StatusCode = 0 Then 'The Computer is Pingable</p>
<p>                    Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; strServerName &amp; "\root\default:StdRegProv")<br />
                      strKeyPath = "SOFTWARE\Microsoft\Microsoft SQL Server"<br />
                      strValueName = "InstalledInstances"<br />
                      objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,arrValues<br />
                        If IsNull(arrValues) = 0 Then 'It's a SQL Server! Enumerate it's instances</p>
<p>                          strMsg = strServerName &amp; " is running the following SQL Instance(s): "<br />
                          For Each strValue In arrValues<br />
                              If strValue = "MSSQLSERVER" Then strValue = "Default Instance"<br />
                                strMsg = strServerName &amp; vbtab &amp; strValue &amp; vbtab &amp; GetSQLServerVersion(strServerName)<br />
                          Next</p>
<p>                          objLogFile.WriteLine strMsg<br />
                          wscript.echo strMsg<br />
			End If<br />
                     Set objRegistry = Nothing<br />
              End If<br />
          Set objServer = Nothing<br />
      Next<br />
    objRS.movenext<br />
    Loop<br />
  objRS.close</p>
<p>Set objWMIService = Nothing<br />
Set objRS = Nothing<br />
Set objAdRootDSE = Nothing</p>
<p>Function GetSQLServerVersion(serverName)</p>
<p>		Set cxn = Wscript.CreateObject("ADODB.Connection")<br />
		strConn = "Driver={SQL Server};Server=" &amp; strServerName &amp; ";Database=master"<br />
		sqlstr  = "SELECT @@version"<br />
		cxn.ConnectionString = strConn<br />
		cxn.Open<br />
		Set rs=cxn.Execute(sqlstr)		</p>
<p>		rs.MoveFirst</p>
<p>		If ERR  0 Then</p>
<p>			objERRORLog.WriteLine Err.Description<br />
			GetSQLServerVersion = Err.Description<br />
			ERR.Clear<br />
		Else<br />
			GetSQLServerVersion = rs(0).Value</p>
<p>		End If</p>
<p>		cxn.Close</p>
<p>End Function '//Function GetSQLServerVersion(serverName)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jerry</title>
		<link>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-578</link>
		<dc:creator>Jerry</dc:creator>
		<pubDate>Tue, 02 Oct 2007 19:34:34 +0000</pubDate>
		<guid>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-578</guid>
		<description>Looks great. Where do I put the domain name?</description>
		<content:encoded><![CDATA[<p>Looks great. Where do I put the domain name?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JM</title>
		<link>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-577</link>
		<dc:creator>JM</dc:creator>
		<pubDate>Tue, 20 Feb 2007 13:44:44 +0000</pubDate>
		<guid>http://blog.netnerds.net/2007/01/vbscript-enumerating-all-sql-servers-on-a-domain/#comment-577</guid>
		<description>Very kewl!

Cheers for posting it up!
JM</description>
		<content:encoded><![CDATA[<p>Very kewl!</p>
<p>Cheers for posting it up!<br />
JM</p>
]]></content:encoded>
	</item>
</channel>
</rss>
