Как удаленно обнаружить экземпляры SQL Server на машине? Часть II
Способ посмотреть на удаленной машине установленные сервисы, имеющие отношение к различным фичам в составе SQL Server, к сожалению, ничего не говорит про версию продукта. Установленный экземпляр по умолчанию будет все так же называться MSSQLSERVER и в случае 2008R2, и в случае 2008, и в случае 2005. Здесь нам на помощь придет реджистри, сиречь системный реестр. Меня поражают «знатоки» в форумах, которые на четко поставленный вопрос, как найти информацию о SQL Server в реестре, безапелляционно надув щеки, отвечают you don't have to go through the registry for that - look up the SERVERPROPERTY() function in Books Online. Легко прослыть в форуме знатоком, отвечая не на те вопросы, что тебе задают,а которые ты сам себе придумал. То, что SQL Server в этот момент может быть остановлен или с ним нельзя соединиться еще по каким-либо причинам, знатока, по-видимому, не особенно волнует. Как вытянуть из реестра информацию об установленных экземплярах SQL Server, мы проходили здесь. Теперь давайте посмотрим, как это сделать удаленно. Конфигурация примера будет та же, что и в предыдущем посте. У меня имеется хост и на нем виртуалка по имени w7x86sql08r2. С хоста требуется забраться в реестр на виртуалке и прочитать там информацию об установленных экземплярах SQL Server. Информация об установленных экземплярах, например, SQL Server Engine, хранится в ключе HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL. Каждое значение (Registry Value) в этом ключе имеет имя, равное имени экземпляра, а в данных значения (Value Data) хранится подключ, в котором можно почерпнуть более детальную информацию об экземпляре. Рис. 1 Скрипт пробегается по всем значениям, и ходит для каждого в соответствующий ключик, откуда собирает данные по номеру версии (ключ <Подключик экземпляра>\MSSQLServer\CurrentVersion, значение CurrentVersion): Рис. 2 и установленной функциональности (ключ <Подключик экземпляра>\ConfigurationState, все значения, у которых в данных стоит 0х00000001). Аналогично поступаем с экземплярами Analysis Services (ключ HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\OLAP) и Reporting Services (...\RS). Для удаленного доступа к реестру можно использовать WMI, как в предыдущем посте; мы для разнообразия воспользуемся встроенными средствами .NET:
Скрипт 1 Сохраняем данный код в файл и вызываем его из командной строки PowerShell: Рис. 3 Рис. 4 Соответствие номера версии человеческому обозначению можно найти здесь же в блоге, в одном из ранних постов. Для успешной работы скрипта на удаленной машине, на которой мы хотим обнаружить экземпляры SQL Server, должна быть запущена служба Remote Registry, которая по умолчанию обычно выключена: Рис. 5 Она, в свою очередь, зависит от службы Remote Procedure Call (RPC), которая по умолчанию обычно включена, т.к. от нее много еще чего зависит. Автор: Алексей Шуленин |