Source/Cmdlets/GetSMODatabase.cs

using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using SQL.SMO.Databases;
using SQL.SMO.Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
 
namespace SQL.SMO.Cmdlets
{
    [Cmdlet(VerbsCommon.Get, "SMODatabase")]
    public class GetSMODatabase : SharedCmdlet
    {
        private Dynamic _dyn;
 
        internal override RuntimeDefinedParameterDictionary GenerateFor()
        {
            if (_dyn == null) { _dyn = new Dynamic(); }
            if (Context.DBNames == null)
            {
                Context.GetDatabaseNames();
            }
            _source = _dyn.Generate(dName, Context.DBNames, false);
            return _source;
        }
 
        protected override void BeginProcessing()
        {
            base.BeginProcessing();
            CheckSession();
        }
 
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            DatabaseCollection dbCol = ((Server)Context.Connection).Databases;
            string[] chosen = _source[dName].Value as string[];
            if (chosen == null)
            {
                chosen = Context.DBNames;
            }
            for (int i = 0; i < chosen.Length; i++)
            {
                string d = chosen[i];
                Database db = dbCol.OfType<Database>().Single(x => x.Name == d);
                WriteObject(new SMODatabase(db));
            }
        }
    }
}