Generate SQL Server Instances without SMO

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