Often times it is required to find out the SQL name from the host names in a clustered environment so you can use it to connect through SSMS. There are many ways you can achieve this, however I am showing 2 methods here. Method 1 is the most common way using Failover Cluster Manager (ideal when there is one or just a few servers) and second method focuses on getting the same information using PowerShell (Ideal when you are dealing with a large number of servers)
Method 1:
The easiest way (if not the fastest) is to load up the Failover Cluster Manager and go to each Failover Clustered instance to look for the virtual SQL names. You can also easily see which FCIs are running on a particular node by selecting a node and viewing what resources it currently owns as shown in the below snippets.
This is the same for Windows 2003/ 2008+ and SQL 2005/ 2008.
Method 2:
While the above method is pretty easy, its not practical to log into each server to load up FCM when you have tens of hundreds of servers. For this you can use this simple PowerShell script that can be run remotely and can be fed with as many servers as you want to. This will output the SQL virtual names including those with named instances. Please note that the PowerShell cmdlets used here require admin rights on all of the nodes in the cluster or a security exception will be thrown.
Steps:
1. Create a notepad file “TestServers” on your desktop that contains the list of servers (Host names) that you want to run the code against
2. Open Powershell with Admin Privileges
3. Use the below script to load the servers list into a Variable (Copy & paste the below code in PowerShell and click Enter – Make sure to change the location of your text file)
$machines = get-content C:\Users\Desktop\testservers.txt
4. Use the below script to call the servers from the above variable to get the output
import-module failoverclusters foreach ($machine in $machines) {get-clusterresource -Cluster $machine -ErrorAction SilentlyContinue| where-object {$_.ResourceType -like ?SQL Server?}| get-clusterparameter VirtualServerName,InstanceName | group-object ClusterObject | select-object @{Name = ?SQLInstance?; Expression = {[string]::join(?\?,($_.Group | select-object -expandproperty Value))}}}