Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

O PowerShell Desired State Configuration (DSC) simplifica muito o trabalho de implantação e configuração do sistema operacional, funções de servidor e aplicativos quando você tem centenas de servidores.

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

  • Não existem relatórios completos sobre o estado dos sistemas. Se a configuração necessária não foi aplicada em alguns servidores, sem esses relatórios não saberemos disso. É muito difícil obter informações do servidor de relatórios integrado e, para um grande número de hosts, também pode levar muito tempo.
  • Carece de escalabilidade e tolerância a falhas. É impossível construir um farm de servidores web pull DSC que tenha um único banco de dados tolerante a falhas e um armazenamento comum de arquivos mof para configurações, módulos e chaves de registro.

Hoje vou contar como você pode resolver o primeiro problema e obter dados para relatórios. Tudo seria mais simples se o SQL pudesse ser usado como banco de dados. EM promessas suporte integrado apenas no Windows Server 2019 ou na compilação do Windows Server 1803. Busque dados usando o provedor OleDB também não funcionaporque o DSC Server usa um parâmetro nomeado que não é totalmente suportado pelo OleDbCommand.

Encontrei este método: para quem usa Windows Server 2012 e 2016, você pode sintonia usando um banco de dados SQL como back-end para o servidor de consulta DSC. Para isso, criaremos um “proxy” em forma de arquivo .mdb com tabelas associadas, que redirecionará os dados recebidos dos relatórios dos clientes para o banco de dados do SQL Server.

Nota: Para Windows Server 2016 você deve usar AccessDatabaseEngine2016x86porque Microsoft.Jet.OLEDB.4.0 não é mais compatível.

Não vou entrar em detalhes sobre o processo de implantação de um servidor pull DSC, está muito bem descrito aqui. Vou apenas observar alguns pontos. Se implantarmos o extrator DSC no mesmo servidor web com WSUS ou Kaspersky Security Center, no script de criação de configuração precisaremos alterar os seguintes parâmetros:

  1. UseSecurityBestPractices     = $false

    Caso contrário, o TLS 1.0 será desabilitado e você não conseguirá 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á executar o servidor AppPool DSC no IIS com WSUS.

  3. Ao instalar o DSC Server com WSUS, desative o cache estático e dinâmico do site DSC.

Vamos prosseguir com a configuração do servidor DSC para usar o banco de dados SQL.

Criando um banco de dados SQL

  1. Vamos criar um banco de dados SQL vazio chamado DSC.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  2. Vamos criar uma conta para conectar-se a este banco de dados. Primeiro, verifique se o servidor SQL permite autenticação de contas Windows e SQL.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  4. Concluído.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

Criando um esquema para o banco de dados DSC

Existem duas maneiras de criar um esquema para um banco de dados DSC:

  • de forma independente, através de um script 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 vazio como parte do módulo PS PSDesiredStateConfiguration por meio do Assistente de importação de dados SQL.

    O Devices.mdb com o qual trabalharemos está localizado em C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  3. Selecione o arquivo do qual importamos o diagrama.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  4. Indicamos onde importar - para nós é um banco de dados SQL.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  5. Selecione o servidor SQL (Nome do Servidor) e o banco de dados para o qual importaremos os dados (Banco de Dados).

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  8. Marque a caixa de seleção Executar imediatamente e clique em Concluir.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  9. Concluído.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  10. Como resultado, as tabelas deverão aparecer no banco de dados DSC.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

Configurando um arquivo “proxy” .mdb

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

Vamos criar uma conexão ODBC do sistema com o servidor SQL (o número de bits da conexão deve corresponder ao número de bits do MS Access - 64 ou 32). Ele pode ser criado usando:
- Cmdlet 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 instalado. Vá para a guia System DSN e crie uma conexão de sistema (Adicionar).

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  3. Especifique o nome e o servidor ao qual se conectar. Em seguida, será necessário criar uma conexão com os mesmos parâmetros no servidor DSC.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  4. Indicamos que para conectar-se ao servidor SQL, utilizamos um login criado anteriormente com o nome DSC.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  6. Clique em Concluir.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  8. Concluído.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

Criando um banco de dados devices.mdb no MS Access. Inicie o MS Access e crie um banco de dados vazio chamado devices.mdb.

Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  1. Vá para a guia Dados Externos e clique em Banco de Dados ODBC. Na janela exibida, selecione Criar uma tabela vinculada para conectar-se à fonte de dados.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  3. Selecione as tabelas que precisam ser vinculadas. Marque a caixa Salvar senha e clique em OK. Salve a senha sempre para todas as três tabelas.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

    — NodeName ou IPAddress para dbo_RegistrationData;

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

    — NodeName ou IPAddress para dbo_StatusReport.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  5. Vamos renomear as tabelas no MS Access, a saber: remover o prefixo dbo_ para que o DSC possa utilizá-las.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  6. Concluído.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  7. Salve o arquivo e feche o MS Access. Agora copiamos o devices.mdb resultante para o servidor DSC (por padrão em C: Program FilesWindowsPowershellDSCService) e substituímos o existente por ele (se existir).

Configurando o servidor DSC para usar SQL

  1. Voltamos ao servidor DSC. Para conectar-se ao servidor SQL com nosso arquivo proxy, vamos criar uma nova conexão ODBC no servidor DSC. O nome, a profundidade de bits e as configurações de conexão devem ser os mesmos da criação do arquivo MDB. Você pode copiar o devices.mdb vazio já configurado daqui.
  2. Para usar devices.mdb, você precisa fazer alterações no web.config do servidor pull DSC (o padrão é C:inetpubPSDSCPullServerweb.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 FilesWindowsPowerShellDscServiceDevices.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 FilesWindowsPowerShellDscServiceDevices.mdb;">

Isso conclui a configuração do servidor DSC.

Verificando a funcionalidade do servidor DSC

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  2. Agora vamos verificar se o servidor pull DSC está funcionando corretamente. Para fazer isso, o módulo xPSDesiredStateConfiguration inclui o script pullserversetuptests.ps1. Antes de executar este script, você deve instalar um módulo Powershell chamado Pester. Instale-o Install-Module -Name Pester.
  3. Abra C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfiguration<module version>DSCPullServerSetupPullServerDeploymentVerificationTest (na versão de exemplo 8.0.0.0.0).

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

  4. Abra PullServerSetupTests.ps1 e verifique o caminho para o web.config do servidor DSC. O caminho para web.config, que verificará o script, está destacado em vermelho. Se necessário, mudamos esse caminho.

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

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

    Configuração e arquivo do estado desejado do PowerShell: parte 1. Configurando o DSC Pull Server para funcionar com um banco de dados SQL

Isso é tudo. Nos artigos a seguir pretendo explicar como construir relatórios sobre os dados obtidos e abordarei questões sobre tolerância a falhas e escalabilidade.

Fonte: habr.com

Adicionar um comentário