Arquivos e configuração do estado desejado do PowerShell: Parte 1. Configurando o DSC Pull Server para funcionar com o banco de dados SQL



A Configuração de Estado Desejado (DSC) do PowerShell facilita a implantação e configuração do sistema operacional, funções de servidor e aplicativos quando você possui centenas de servidores.

Mas ao usar o DSC no local, ou seja, não no MS Azure, existem algumas nuances. Eles são especialmente tangíveis se a organização for grande (de 300 estações de trabalho e servidores) e ainda não abriu o mundo dos contêineres:

  • Não há relatórios completos sobre o status dos sistemas. Se a configuração necessária não foi aplicada em alguns servidores, sem esses relatórios, não saberemos sobre ela. É muito difícil obter informações do servidor de relatório interno e, para um grande número de hosts, também é muito tempo.
  • Não há escalabilidade e tolerância a falhas. É impossível criar um conjunto de servidores Web DSC de pesquisa que possuam um único banco de dados tolerante a falhas e um repositório comum de arquivos de configuração, módulos e chaves de registro.

Hoje vou explicar como resolver o primeiro problema e obter os dados para geração de relatórios. Tudo seria mais simples se o SQL pudesse ser usado como banco de dados. A MS promete suporte interno apenas no Windows Server 2019 ou no servidor Windows 1803 de compilação. Ele também falhará na recuperação de dados usando o provedor OleDB, pois o servidor DSC usa um parâmetro nomeado que não é totalmente suportado pelo OleDbCommand.

Eu encontrei o seguinte: para aqueles que usam o Windows Server 2012 e 2016, você pode configurar o uso do banco de dados SQL como o back-end do servidor DSC de pesquisa. Para fazer isso, crie um "proxy" na forma de um arquivo .mdb com tabelas vinculadas, que redirecionará os dados recebidos dos relatórios do cliente para o banco de dados do SQL Server.

Nota: No Windows Server 2016, você deve usar o AccessDatabaseEngine2016x86 , porque o Microsoft.Jet.OLEDB.4.0 não é mais suportado.

Não vou me debruçar sobre o processo de implantação do servidor DSC de pesquisa, está muito bem descrito aqui . Eu noto apenas alguns pontos. Se implantarmos o DSC de pesquisa no mesmo servidor da Web com o WSUS ou o Kaspersky Security Center, no script de criação da configuração, será necessário alterar os seguintes parâmetros:

  1. UseSecurityBestPractices     = $false 

    Caso contrário, o TLS 1.0 será desativado, você não poderá se conectar ao banco de dados SQL. O Kaspersky Security Center também não funcionará (o problema deve ser resolvido no Kaspersky Security Center v11).
  2.  Enable32BitAppOnWin64   = $true 

    Se você não fizer essa alteração, não poderá iniciar o servidor AppPool DSC no IIS com o WSUS.
  3. Ao instalar um servidor DSC com o WSUS, desative o cache estático e dinâmico do site DSC.

Vamos seguir para configurar o servidor DSC para usar o banco de dados SQL.

Criando um banco de dados SQL


  1. Crie um banco de dados SQL vazio chamado DSC.



  2. Crie uma conta para se conectar a este banco de dados. Pré-verifique se a autenticação das contas Windows e SQL está ativada no servidor SQL.



  3. Vá para a seção Mapeamento do Usuário. Selecione um banco de dados, neste caso, DSC. Concedemos os direitos do proprietário do banco de dados.

  4. Feito.


Criando um esquema para um banco de dados DSC


Há duas maneiras de criar um esquema para um banco de dados DSC:

  • independentemente, através de um script no TSQL

     SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Devices]( [TargetName] [nvarchar](255) NOT NULL, [ConfigurationID] [nvarchar](255) NOT NULL, [ServerCheckSum] [nvarchar](255) NOT NULL, [TargetCheckSum] [nvarchar](255) NOT NULL, [NodeCompliant] [bit] NOT NULL, [LastComplianceTime] [datetime] NULL, [LastHeartbeatTime] [datetime] NULL, [Dirty] [bit] NOT NULL, [StatusCode] [int] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[RegistrationData]( [AgentId] [nvarchar](255) NOT NULL, [LCMVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [ConfigurationNames] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO CREATE TABLE [dbo].[StatusReport]( [JobId] [nvarchar](50) NOT NULL, [Id] [nvarchar](50) NOT NULL, [OperationType] [nvarchar](255) NULL, [RefreshMode] [nvarchar](255) NULL, [Status] [nvarchar](255) NULL, [LCMVersion] [nvarchar](50) NULL, [ReportFormatVersion] [nvarchar](255) NULL, [ConfigurationVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [StartTime] [datetime] NULL, [EndTime] [datetime] NULL, [Errors] [nvarchar](max) NULL, [StatusData] [nvarchar](max) NULL, [RebootRequested] [nvarchar](255) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO 
  • importe dados de devices.mdb vazios como parte do módulo PS PSDesiredStateConfiguration por meio do SQL Data Import Wizard.

    O Devices.mdb, com o qual trabalharemos, está localizado em C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer.

  1. Para importar dados, execute o Assistente para Importação e Exportação do SQL Server.

  2. Escolhemos de onde iremos coletar os dados - no nosso caso, é um banco de dados do Microsoft Access. Clique em Avançar.

  3. Selecione o arquivo de onde importamos o esquema.

  4. Indicamos onde importar - temos esse banco de dados SQL.

  5. Selecionamos o servidor SQL (Nome do servidor) e o banco de dados no qual importaremos os dados (DataBase).

  6. Selecionamos a opção Copiar dados de uma ou mais tabelas ou visualizações (copiar dados de tabelas ou visualizações).

  7. Selecionamos as tabelas das quais importaremos o esquema do banco de dados.

  8. Marque Executar imediatamente e clique em Concluir.

  9. Feito.

  10. Como resultado, as tabelas devem aparecer no banco de dados DSC.


Configurando um arquivo "proxy" .mdb


Criando uma conexão ODBC com o servidor SQL. Supõe-se que o MS Access não esteja instalado no servidor com DSC; portanto, a configuração do database.mdb é executada em um host intermediário com o MS Access instalado.

Vamos criar uma conexão ODBC do sistema com o servidor SQL (a profundidade de bits da conexão deve corresponder à profundidade de bits do MS Access - 64 ou 32). Pode ser criado usando:
- Cmdlet do PowerShell:

 Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '<64-bit or 32-bit>' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') –PassThru 

- ou manualmente, usando o assistente de conexão:

  1. Abra ferramentas administrativas. Selecionamos fontes de dados ODBC, dependendo da versão do MS Access instalada. Vá para a guia DSN do sistema e crie uma conexão do sistema (Adicionar).

  2. Indicamos que nos conectaremos ao servidor SQL. Clique em Finish.

  3. Especifique o nome e o servidor para conectar. Em seguida, uma conexão com os mesmos parâmetros precisará ser criada no servidor DSC.

  4. Indicamos que, para conectar-se ao servidor SQL, usamos o logon criado anteriormente com o nome DSC.

  5. Especifique o banco de dados nas configurações de conexão DSC.

  6. Clique em Finish.

  7. Antes de concluir as configurações, verificamos se a conexão está funcionando (fonte de dados de teste).

  8. Feito.


Criando o banco de dados devices.mdb no MS Access. Iniciamos o MS Access e criamos um banco de dados vazio chamado devices.mdb.



  1. Vá para a guia Dados externos, clique no banco de dados ODBC. Na janela exibida, selecione Criar uma tabela vinculada para comunicação com a fonte de dados.

  2. Na nova janela, selecione a guia Fonte de dados da máquina e clique em OK. Na nova janela, insira as credenciais para conectar-se ao servidor SQL.

  3. Selecionamos as tabelas que precisam ser vinculadas. Marque a caixa de seleção Salvar senha e clique em OK. A senha deve ser salva sempre para todas as três tabelas.

  4. Nos índices, você precisa selecionar o seguinte:
    - TargetName para a tabela dbo_Devices;



    - NodeName ou IPAddress para dbo_RegistrationData;



    - NodeName ou IPAddress para dbo_StatusReport.

  5. Renomeie as tabelas no MS Access, a saber: remova o prefixo dbo_ para que o DSC possa usá-las.

  6. Feito.

  7. Salve o arquivo e feche o MS Access. Agora copie o devices.mdb resultante para o servidor DSC (por padrão em C: \ Arquivos de Programas \ WindowsPowershell \ DSCService) e substitua-o pelo existente (se houver).

Configurando um servidor DSC para usar SQL


  1. Retornamos ao servidor DSC. Para conectar-se ao servidor SQL com nosso arquivo proxy, crie uma nova conexão ODBC no servidor DSC. O nome, a profundidade dos bits e as configurações de conexão devem ser iguais aos da criação do arquivo MDB. Você pode copiar o devices.mdb vazio já configurado a partir daqui.
  2. Para usar o devices.mdb, é necessário fazer alterações no web.config do servidor DSC de pesquisa (por padrão, C: \ inetpub \ PSDSCPullServer \ web.config):


- para Windows Server 2012

 <add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;"> 

- para Windows Server 2016

 <add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;"> 


Isso conclui a configuração do servidor DSC.

Verificando a integridade do servidor DSC


  1. Verifique se o servidor DSC está acessível através de um navegador da web.

  2. Agora vamos verificar se o servidor DSC de votação funciona corretamente. Para isso, o módulo xPSDesiredStateConfiguration possui um script pullserversetuptests.ps1. Antes de executar este script, você deve instalar o módulo Powershell chamado Pester. Instale-o Install-Module -Name Pester.
  3. Abra C: \ Arquivos de programas \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <versão do módulo> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (no exemplo, versão 8.0.0.0.0).

  4. Abra PullServerSetupTests.ps1 e verifique o caminho para o web.config do servidor DSC. Vermelho destacou o caminho para web.config, que verificará o script. Se necessário, altere esse caminho.

  5. Execute pullserversetuptests.ps1
    Invocar-Pester. \ PullServerSetupTests.ps1
    Tudo funciona.

  6. No SQL Management Studio, vemos que os hosts administrados enviam relatórios ao servidor de relatório DSC e os dados vão para o banco de dados DSC no servidor SQL.


Só isso. Nos artigos a seguir, pretendo contar como criar relatórios sobre os dados recebidos e abordar questões sobre tolerância a falhas e escalabilidade.

Source: https://habr.com/ru/post/pt452064/


All Articles