
O PowerShell Desired State Configuration (DSC) simplifica muito o trabalho de implantar e configurar o sistema operacional, os papéis do servidor e os aplicativos quando você possui centenas de servidores.
No entanto, ao usar o DSC localmente, ou seja, não no MS Azure, surgem algumas nuances. Elas são particularmente perceptíveis se a organização for grande (com mais de 300 estações de trabalho e servidores) e ainda não tiver adentrado o mundo dos containers:
- Não há relatórios completos sobre o estado dos sistemas. Se a configuração necessária não for aplicada em alguns servidores, não saberemos disso sem esses relatórios. É bastante difícil obter informações do servidor de relatórios integrado, e para um grande número de hosts – ainda por cima é demorado.
- Falta escalabilidade e resiliência. Não é possível construir uma fazenda de servidores web DSC que tenha um banco de dados de resiliência único e um armazenamento comum de arquivos mof de configurações, módulos e chaves de registro.
Hoje, vou falar sobre como resolver o primeiro problema e obter dados para construção de relatórios. Tudo seria mais simples se pudéssemos usar SQL como banco de dados. A MS suporte integrado apenas no Windows Server 2019 ou na build do Windows Server 1803. Não é possível coletar dados utilizando o provedor OleDB também , uma vez que o servidor DSC utiliza um parâmetro nomeado que não é totalmente suportado pelo OleDbCommand.
Encontrei este método: para quem utiliza o Windows Server 2012 e 2016, é possível usar um banco de dados SQL como backend para o servidor DSC. Para isso, criaremos um ‘proxy’ na forma de um arquivo .mdb com tabelas vinculadas, que redirecionará os dados obtidos dos relatórios dos clientes para o banco de dados SQL Server.
Nota: para o Windows Server 2016 é necessário usar , uma vez que o Microsoft.Jet.OLEDB.4.0 não é mais suportado.
Não vou entrar em detalhes sobre o processo de implantação do servidor DSC, pois ele é muito bem descrito . Apenas destacarei alguns pontos. Se estiver implantando o servidor DSC em uma única web server com WSUS ou Kaspersky Security Center, será necessário alterar os seguintes parâmetros no script de criação da configuração:
UseSecurityBestPractices = $falseCaso 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).
Enable32BitAppOnWin64 = $trueSe não fizer essa alteração, não será possível iniciar o AppPool do servidor DSC no IIS com o WSUS.
- Ao instalar o servidor DSC junto com o WSUS, desative o cache estático e dinâmico para o site DSC.
Vamos configurar o servidor DSC para usar o banco de dados SQL.
Criar banco de dados SQL
- Vamos criar um banco de dados SQL vazio chamado DSC.


- Vamos criar uma conta para conectar a esse banco de dados. Verifique previamente se a autenticação de contas está habilitada no servidor SQL, tanto para Windows quanto para SQL.


- Acesse a seção User Mapping. Selecione o banco de dados, neste caso – DSC. Dê permissões de proprietário do banco de dados.

- Pronto.

Criar esquema para o banco de dados DSC
É possível criar um esquema para o banco de dados DSC de duas maneiras:
- manual, através de 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 - importar dados do arquivo vazio devices.mdb como parte do módulo PSDesiredStateConfiguration através do Assistente de Importação de Dados do SQL.
O arquivo Devices.mdb, com o qual vamos trabalhar, está localizado em C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- Para importar os dados, inicie o Assistente de Importação e Exportação do SQL Server.

- Escolha de onde vamos buscar os dados – neste caso, é o banco de dados Microsoft Access. Clique em Next.

- Selecione o arquivo do qual vamos importar o esquema.

- Indique para onde importar – neste caso, é o banco de dados SQL.

- Selecione o servidor SQL (Server Name) e o banco de dados para o qual vamos importar os dados (DataBase).

- Selecione a opção Copiar dados de uma ou mais tabelas ou visualizações.

- Escolha as tabelas das quais vamos importar o esquema do banco de dados.

- Marque a opção Executar imediatamente e clique em Finish.

- Pronto.

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

Configuração do arquivo .mdb "proxy"
Criação de uma conexão ODBC com o servidor SQL. Assume-se que o MS Access não está instalado no servidor com DSC, portanto, a configuração do databases.mdb é realizada em um host intermediário com o MS Access instalado.
Vamos criar uma conexão ODBC do sistema com o servidor SQL (a arquitetura da conexão deve coincidir com a do MS Access – 64 ou 32). Isso pode ser feito através de:
— cmdlet do Powershell:
Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=Servidor Pull DSC',"Server=",'Trusted_Connection=yes','Database=DSC') –PassThru— ou manualmente, através do assistente de conexões:
- Abrimos Ferramentas Administrativas. Selecionamos fontes de dados ODBC de acordo com a versão do MS Access instalado. Vamos para a aba DSN do Sistema e criamos uma conexão do sistema (Adicionar).

- Indicamos que vamos nos conectar ao servidor SQL. Pressionamos Concluir.

- Indicamos o nome e o servidor para a conexão. Depois, será necessário criar a conexão com os mesmos parâmetros no servidor DSC.

- Indicamos que para a conexão ao servidor SQL usamos o login previamente criado com o nome DSC.

- Indicamos o BD nas configurações de conexão do DSC.

- Pressionamos Concluir.

- Antes de finalizar a configuração, verificamos se a conexão está funcionando (Testar Fonte de Dados).

- Pronto.

Criação do banco de dados devices.mdb no MS Access. Iniciamos o MS Access e criamos um banco de dados vazio chamado devices.mdb.

- Vamos para a aba Dados Externos, clicamos em Banco de Dados ODBC. Na janela que aparece, escolhemos Criar uma tabela vinculada para conexão com a fonte de dados.

- Na nova janela, escolhemos a aba Fonte de Dados da Máquina e pressionamos OK. Na nova janela, inserimos as credenciais para conexão ao servidor SQL.

- Selecionamos as tabelas que precisam ser vinculadas. Marcamos a caixa de seleção Salvar senha e pressionamos OK. A senha deve ser salva todas as vezes para todas as três tabelas.

- Nos índices, precisamos selecionar o seguinte:
— TargetName para a tabela dbo_Devices;
— NodeName ou IPAddress para dbo_RegistrationData;
— NodeName ou IPAddress para dbo_StatusReport.
- Renomeamos as tabelas no MS Access, ou seja: removemos o prefixo dbo_, para que o DSC possa usá-las.

- Pronto.

- Salvamos o arquivo e fechamos o MS Access. Agora copiamos o devices.mdb obtido para o servidor DSC (por padrão em C:Program FilesWindowsPowershellDSCService) e o substituímos (se houver um existente).
Configuração do servidor DSC para uso do SQL
- Voltamos ao servidor DSC. Para se conectar ao SQL Server com nosso arquivo proxy, criaremos uma nova conexão ODBC no servidor DSC. O nome, a arquitetura e as configurações de conexão devem ser os mesmos que ao criar o arquivo MDB. É possível copiar o arquivo devices.mdb vazio já configurado daqui.
- Para usar o devices.mdb, é necessário fazer alterações no web.config do servidor de consulta DSC (por padrão – C:inetpubPSDSCPullServerweb.config):
— para Windows Server 2012
— para Windows Server 2016
Com isso, a configuração do servidor DSC está concluída.
Verificação do funcionamento do servidor DSC
- Verificaremos se o servidor DSC está acessível através do navegador web.

- Agora vamos verificar se o servidor de consulta DSC está funcionando corretamente. Para isso, no módulo xPSDesiredStateConfiguration, existe um script pullserversetuptests.ps1. Antes de executar este script, é necessário instalar o módulo PowerShell chamado Pester. Instalamos com Install-Module -Name Pester.
- Abrimos C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (no exemplo, versão 8.0.0.0.0).

- Abrimos PullServerSetupTests.ps1 e verificamos o caminho para o web.config do servidor DSC. Destacamos em vermelho o caminho para o web.config que será checado pelo script. Se necessário, alteramos este caminho.

- Executamos pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Está tudo funcionando.
- No SQL Management Studio, vemos que os hosts gerenciados estão enviando relatórios para o servidor de relatórios DSC e os dados estão sendo inseridos na base de dados DSC no SQL Server.

Isso é tudo. Nos próximos artigos, pretendo falar sobre como gerar relatórios com os dados obtidos e abordar questões sobre alta disponibilidade e escalabilidade.
Fonte: habr.com





































