protected override void InternalProcessRecord()
        {
            #region validation stuff
            // ensure can hit farm
            var farm = SPFarm.Local;
            if (farm == null)
            {
                ThrowTerminatingError(new InvalidOperationException("SharePoint farm not found."), ErrorCategory.ResourceUnavailable, this);
                SkipProcessCurrentRecord();
                return;
            }

            // ensure can hit local server
            var server = SPServer.Local;
            if (server == null)
            {
                ThrowTerminatingError(new InvalidOperationException("SharePoint local server not found."), ErrorCategory.ResourceUnavailable, this);
                SkipProcessCurrentRecord();
                return;
            }
            #endregion

            //Verify that the search service doesn't already exist
            var searchService =
                SPFarm.Local.Services.GetValue <BaristaSearchService>(
                    BaristaSearchService.NtServiceName);

            if (searchService != null)
            {
                WriteError(new InvalidOperationException("Barista Search Service already exists."),
                           ErrorCategory.ResourceExists,
                           searchService);
                WriteObject(searchService);
                return;
            }

            searchService = new BaristaSearchService(SPFarm.Local, ManagedAccount.Read());
            searchService.Update();

            // provision the service
            searchService.Provision();

            //Check for and copy a property bag setting
            if (farm.Properties.ContainsKey("BaristaSearchIndexDefinitions"))
            {
                searchService.Properties.Add("BaristaSearchIndexDefinitions", farm.Properties["BaristaSearchIndexDefinitions"]);
                searchService.Update();
            }

            // pass service back to PowerShell
            WriteObject(searchService);
        }
        public void Stop()
        {
            if (m_serviceHost == null)
            {
                return;
            }

            m_serviceHost.Close();
            m_serviceHost = null;

            //Ensure that all indexes have been closed.
            BaristaSearchService.CloseAllIndexes();
        }