public IEnumerable <MsSqlServers> GetSqlInstanceNames() { var machineName = Environment.MachineName; using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) { RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false); if (instanceKey != null) { foreach (var instanceName in instanceKey.GetValueNames()) { var value = new MsSqlServers() { Server = machineName, Name = $@"{machineName}\{instanceName}" }; yield return(value); // (machineName + @"\" + instanceName); } } } }
//public string Get // https://stackoverflow.com/questions/1054984/how-can-i-get-column-names-from-a-table-in-sql-server public void Inventory(string saveToFolder) { var InventoryFolder = saveToFolder; Console.WriteLine($"{Utilities.LogTime()} Begin MsSqlInventory::..."); sqlinstances = MsSqlServers.GetSqlInstanceNames().ToList <MsSqlServers>(); MsSqlServers.ToJsonFile(sqlinstances, InventoryTime, InventoryFolder); Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[GetSqlInstanceNames]"); sqlinstances.ForEach(d => { dblist .AddRange(MsSqlDatabases.GetSqlDatabases(d.Server, d.Name) .ToList <MsSqlDatabases>()); }); MsSqlDatabases.ToJsonFile(dblist, InventoryTime, InventoryFolder); Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[GetSqlDatabases]"); //dblist.ForEach(d => { tblist.AddRange(GetSqlDatabaseTables(d.Server, d.Instance, d.Database).ToList<MsSqlTables>()); }); dblist.ForEach(d => { tblist .AddRange(MsSqlTables.GetSqlDatabaseTables(d.Server, d.Instance, d.Name)); }); MsSqlTables.ToJsonFile(tblist, InventoryTime, InventoryFolder); Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[GetSqlDatabaseTables]"); dblist.ForEach(d => { columns .AddRange(MsSqlTableColumns.GetSqlTableColumns(d.Server, d.Instance, d.Name) .ToList <MsSqlTableColumns>()); }); MsSqlTableColumns.ToJsonFile(columns, InventoryTime, InventoryFolder); Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[GetSqlTableColumns]"); dblist.ForEach(d => { procedures .AddRange(MsSqlStoredProcedure.GetSqlStoredProcedures(d.Server, d.Instance, d.Name) .ToList <MsSqlStoredProcedure>()); }); MsSqlStoredProcedure.ToJsonFile(procedures, InventoryTime, InventoryFolder); Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[GetSqlStoredProcedures({procedures.Count()})]"); //Console.WriteLine($"{Utilities.LogTime()} Completed MsSqlInventory::..:[ToJsonFile]"); //var ix = 0; }