Apareceu essa questão na lista SQLServerDay. Várias foram as soluções, sendo que eu enviei as seguintes:
Usando o OSQL.exe (cliente para o SQL Server):
C:\Users\agnaldo>osql -L
Servers:
NOTE\SQL2008
NOTE\SQLEXPRESS
NOTEBOOK
C:\Users\agnaldo>
A outra solução foi fazer um aplicativo Windows Forms em C#, com um DataGridView na tela, para apresentar os dados:
using System;
using System.Windows.Forms;
using System.Data.Sql;
namespace DescobrirSQLs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlDataSourceEnumerator sqls = SqlDataSourceEnumerator.Instance;
dataGridView1.DataSource = sqls.GetDataSources();
}
}
}

A única observação é que, nos dois casos, o serviço SQL Server Browser tem que estar executando nas máquinas. Se não, não lista.
Outras soluções foram:
- Usar T-SQL como explicado em http://bit.ly/a1UZFc (para um só servidor).
- Usar PowerShell para ler o registry do servidor (para um só servidor):
$sql = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$computer)
.OpenSubKey('SOFTWARE\Microsoft\Microsoft SQL Server').GetValue('InstalledInstances');
foreach($sqlserver in $sql)
{
if($sqlserver -eq "MSSQLSERVER") # Default instance
{
Write-Host -ForegroundColor Green "$computer (Default instance)";
}
else # Named instance
{
Write-Host -ForegroundColor Green "$computer\$sqlserver (Named instance)";
}
}