Можно ли написать скрипт создания зарегистрированных серверов в SSMS 2008? - PullRequest
2 голосов
/ 01 июля 2011

У меня есть около 60 серверов, которые я хочу добавить в качестве зарегистрированных серверов для быстрого доступа. Они названы так же ... Есть ли способ написать это, чтобы мне не пришлось проходить через мастер 60 раз? Спасибо!

P.S. Я проверил файл XML, и он выглядит как зверь. Не уверен, что я хочу сделать копирование и вставку 60 раз ...

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

Если вам удобно в PowerShell, это можно сделать таким образом.См. Регистрация серверов SQL в 2000 EM, 2005 SSMS и 2008 SSMS .

2 голосов
/ 04 апреля 2013

У меня есть сценарий, который я написал, который сгенерирует XML для создания файла .regsrvr, который затем можно будет импортировать в SSMS (протестировано в SQL 2008).Предполагается, что у вас есть источник метаданных о ваших серверах.Если у вас есть эти данные в таблице «dba», это может сработать для вас.Вот ссылка на мою статью в блоге.http://sqldavel.blogspot.com/2013/03/maintaining-registered-servers.html

1 голос
/ 01 августа 2018

На самом деле, есть способ!

Он включает несколько шагов, но может быть выполнен через TSQL:

1) Получите ваш список в таблице.

2) Используйте следующий запрос, чтобы составить список.Убедитесь, что вы установили @FolderName в соответствие с существующей папкой:

DECLARE @FolderName VARCHAR(100) = 'PROD'
DECLARE @xml_header VARCHAR(MAX) =  N'<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
  <identity>
    <name>urn:uuid:96fe1236-abf6-4a57-b54d-e9baab394fd1</name>
    <baseURI>http://documentcollection/</baseURI>
  </identity>
  <xs:bufferSchema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <definitions xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08">
      <document>
        <docinfo>
          <aliases>
            <alias>/system/schema/RegisteredServers</alias>
          </aliases>
          <sfc:version DomainVersion="1" />
        </docinfo>
        <data>
          <xs:schema targetNamespace="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08" xmlns:sml="http://schemas.serviceml.org/sml/2007/02" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
            <xs:element name="ServerGroup">
              <xs:complexType>
                <xs:sequence>
                  <xs:any namespace="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="RegisteredServer">
              <xs:complexType>
                <xs:sequence>
                  <xs:any namespace="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <RegisteredServers:bufferData xmlns:RegisteredServers="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08">
              <instances xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08">
                <document>
                  <docinfo>
                    <aliases>
                      <alias>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/' + /*Folder_Name*/ + @FolderName + '</alias>
                    </aliases>
                    <sfc:version DomainVersion="1" />
                  </docinfo>
                  <data>
                    <RegisteredServers:ServerGroup xmlns:RegisteredServers="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08" xmlns:sml="http://schemas.serviceml.org/sml/2007/02" xmlns:xs="http://www.w3.org/2001/XMLSchema">
                      <RegisteredServers:RegisteredServers>
                        <sfc:Collection>'
, @xml_middle VARCHAR(MAX) = '</sfc:Collection>
                      </RegisteredServers:RegisteredServers>
                      <RegisteredServers:Parent>
                        <sfc:Reference sml:ref="true">
                          <sml:Uri>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup</sml:Uri>
                        </sfc:Reference>
                      </RegisteredServers:Parent>
                      <RegisteredServers:Name type="string">' + @FolderName + '</RegisteredServers:Name>
                      <RegisteredServers:Description type="string" />
                      <RegisteredServers:ServerType type="ServerType">DatabaseEngine</RegisteredServers:ServerType>
                    </RegisteredServers:ServerGroup>
                  </data>
                </document>'
/*Ending*/
, @xml_footer VARCHAR(MAX) = '              </instances>
            </RegisteredServers:bufferData>
          </xs:schema>
        </data>
      </document>
    </definitions>
  </xs:bufferSchema>
</model>'
, @xml XML
, @serverDetails VARCHAR(MAX)
, @serverReferences VARCHAR(MAX)

SELECT  /*SERVER SPECIFIC*/
@serverDetails = COALESCE(@serverDetails, '') + 
'                <document>
                  <docinfo>
                    <aliases>
                      <alias>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/' + /*Folder_Name*/ + @FolderName + '/RegisteredServer/' + SS.Server + '</alias>
                    </aliases>
                    <sfc:version DomainVersion="1" />
                  </docinfo>
                  <data>
                    <RegisteredServers:RegisteredServer xmlns:RegisteredServers="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08" xmlns:sml="http://schemas.serviceml.org/sml/2007/02" xmlns:xs="http://www.w3.org/2001/XMLSchema">
                      <RegisteredServers:Parent>
                        <sfc:Reference sml:ref="true">
                          <sml:Uri>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/' + /*Folder_Name*/ @FolderName + '</sml:Uri>
                        </sfc:Reference>
                      </RegisteredServers:Parent>
                      <RegisteredServers:Name type="string">' + SS.Server + '</RegisteredServers:Name>
                      <RegisteredServers:Description type="string" />
                      <RegisteredServers:ServerName type="string">' + SS.Server + '</RegisteredServers:ServerName>
                      <RegisteredServers:UseCustomConnectionColor type="boolean">false</RegisteredServers:UseCustomConnectionColor>
                      <RegisteredServers:CustomConnectionColorArgb type="int">-986896</RegisteredServers:CustomConnectionColorArgb>
                      <RegisteredServers:ServerType type="ServerType">DatabaseEngine</RegisteredServers:ServerType>
                      <RegisteredServers:ConnectionStringWithEncryptedPassword type="string">data source=' + SS.Server + ';integrated security=True;pooling=False;multipleactiveresultsets=False;connect timeout=30;encrypt=False;trustservercertificate=False;packet size=4096</RegisteredServers:ConnectionStringWithEncryptedPassword>
                      <RegisteredServers:CredentialPersistenceType type="CredentialPersistenceType">None</RegisteredServers:CredentialPersistenceType>
                      <RegisteredServers:OtherParams type="string" />
                      <RegisteredServers:AuthenticationType type="int">0</RegisteredServers:AuthenticationType>
                      <RegisteredServers:ActiveDirectoryUserId type="string" />
                      <RegisteredServers:ActiveDirectoryTenant type="string" />
                    </RegisteredServers:RegisteredServer>
                  </data>
                </document>
'
, @serverReferences = COALESCE(@serverReferences, '') + 
'                          <sfc:Reference sml:ref="true">
                            <sml:Uri>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/' + /*Folder_Name*/ + @FolderName + '/RegisteredServer/' + SS.Server + '</sml:Uri>
                          </sfc:Reference>
'
        FROM /*Table with Server List*/ServerList SS
        WHERE EnvironmentTypeValue IN ('PROD')      

SET @xml = CAST( (@xml_header + @serverReferences + @xml_middle + @serverDetails  + @xml_footer) AS xml)
SELECT @xml

3) Возможно, вам придется открыть XML, а затем скопировать и вставить в текстовый файл с расширением regsrvr

4) Откройте SSMS, перейдите на «Зарегистрированные серверы», выберите группу и первый заголовок, который вы хотите, чтобы список пошел.

5) Импорт и готово!:)

Обратите внимание, что вы не можете импортировать в SQL Server 2017 более раннюю версию.К сожалению.

...