Private Function getAllServers() As DataTable

Dim dt As New DataTable

'' dt = SmoApplication.EnumAvailableSqlServers

Dim info As ProcessStartInfo = New ProcessStartInfo("cmd", "/c sqlcmd -L")

info.RedirectStandardOutput = True

info.UseShellExecute = False

info.CreateNoWindow = True

Dim p As Process = New Process()

p.StartInfo = info

p.Start()


Dim res As String = p.StandardOutput.ReadToEnd


Dim sqlSrvList() As String = res.Trim.Split(CChar(vbNewLine))


Dim sqlSrvrs As New List(Of String)

For i As Int32 = 1 To sqlSrvList.Length - 1

sqlSrvrs.Add(sqlSrvList(i).Replace(Chr(13), "").Trim)

Next

Dim ServerName As String = ""


Dim DatabaseName As String = ""


Dim Instance As String = ""


Dim drow As DataRow


Dim dcol As New DataColumn

dcol = New DataColumn

dcol.Caption = "Name"

dcol.ColumnName = "Name"

dt.Columns.Add(dcol)

dcol = New DataColumn

dcol.Caption = "Server"

dcol.ColumnName = "Server"

dt.Columns.Add(dcol)

dcol = New DataColumn

dcol.Caption = "Instance"

dcol.ColumnName = "Instance"

dt.Columns.Add(dcol)

For Each sqlserver As String In sqlSrvrs

ServerName = sqlserver

If sqlserver.IndexOf("\") < 1 Then

DatabaseName = sqlserver

Else

DatabaseName = sqlserver.Substring(0, sqlserver.IndexOf("\"))

End If

Instance = sqlserver.Substring(sqlserver.IndexOf("\") + 1)

drow = dt.NewRow

drow("Name") = ServerName.ToUpper

drow("Server") = DatabaseName.ToUpper

drow("Instance") = Instance.ToUpper

dt.Rows.Add(drow)

Next

Return dt

End Function