
PowerShell Desired State Configuration (DSC) memudahkan Anda untuk menggunakan dan mengkonfigurasi sistem operasi, peran server, dan aplikasi ketika Anda memiliki ratusan server.
Tetapi saat menggunakan DSC di tempat, mis. tidak dalam MS Azure, beberapa nuansa muncul. Mereka sangat nyata jika organisasi besar (dari 300 workstation dan server) dan belum membuka dunia kontainer:
- Tidak ada laporan lengkap tentang status sistem. Jika konfigurasi yang diinginkan tidak diterapkan pada server mana pun, maka tanpa laporan ini kami tidak akan mengetahuinya. Sangat sulit untuk mendapatkan informasi dari server laporan bawaan, dan untuk sejumlah besar host juga merupakan waktu yang lama.
- Tidak ada skalabilitas dan toleransi kesalahan. Tidak mungkin untuk membangun peternakan polling server web DSC yang akan memiliki database toleran kesalahan tunggal dan repositori umum file konfigurasi mof, modul, dan kunci pendaftaran.
Hari ini saya akan memberi tahu Anda cara mengatasi masalah pertama dan mendapatkan data untuk pelaporan. Semuanya akan lebih sederhana jika SQL dapat digunakan sebagai basis data. MS
menjanjikan dukungan built-in hanya di Windows Server 2019 atau di build Windows server 1803. MS juga
akan gagal untuk mengambil data menggunakan penyedia OleDB, karena server DSC menggunakan parameter bernama yang tidak sepenuhnya didukung oleh OleDbCommand.
Saya menemukan cara ini: bagi mereka yang menggunakan Windows Server 2012 dan 2016, Anda dapat
mengkonfigurasi penggunaan database SQL sebagai backend untuk polling DSC server. Untuk melakukan ini, buat "proxy" dalam bentuk file .mdb dengan tabel tertaut, yang akan mengarahkan ulang data yang diterima dari laporan klien ke database server SQL.
Catatan: Untuk Windows Server 2016, Anda harus menggunakan AccessDatabaseEngine2016x86 , karena Microsoft.Jet.OLEDB.4.0 tidak lagi didukung.Saya tidak akan membahas proses penyebaran server polling DSC, hal ini dijelaskan dengan sangat baik di
sini . Saya perhatikan hanya beberapa poin. Jika kami menggunakan DSC polling pada server web yang sama dengan WSUS atau Kaspersky Security Center, maka dalam skrip konfigurasi pembuatan, perlu untuk mengubah parameter berikut:
UseSecurityBestPractices = $false
Jika tidak, TLS 1.0 akan dinonaktifkan, Anda tidak akan dapat terhubung ke database SQL. Pusat Keamanan Kaspersky tidak akan berfungsi baik (masalahnya harus diselesaikan di Kaspersky Security Center v11). Enable32BitAppOnWin64 = $true
Jika Anda tidak melakukan perubahan ini, Anda tidak dapat memulai server AppPool DSC pada IIS dengan WSUS.- Saat memasang server DSC dengan WSUS, nonaktifkan caching statis dan dinamis untuk situs DSC.
Mari kita lanjutkan ke pengaturan server DSC untuk menggunakan database SQL.
Membuat Database SQL
- Buat database SQL kosong bernama DSC.


- Buat akun untuk terhubung ke database ini. Pra-verifikasi bahwa otentikasi akun Windows dan SQL diaktifkan pada server SQL.


- Buka bagian Pemetaan Pengguna. Pilih database, dalam hal ini, DSC. Kami memberikan hak kepada pemilik basis data.

- Selesai

Membuat skema untuk basis data DSC
Ada dua cara untuk membuat skema untuk basis data DSC:
- secara mandiri, melalui skrip di 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
- impor data dari devices.mdb kosong sebagai bagian dari modul PS PSDesiredStateConfiguration melalui SQL Data Import Wizard.
Devices.mdb, yang akan kami kerjakan, terletak di C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer.
- Untuk mengimpor data, jalankan SQL Server Import and Export Wizard.

- Kami memilih dari mana kami akan mengumpulkan data - dalam kasus kami, ini adalah database Microsoft Access. Klik Selanjutnya.

- Pilih file dari mana kami mengimpor skema.

- Kami menunjukkan tempat untuk mengimpor - kami memiliki database SQL ini.

- Kami memilih server SQL (Nama Server) dan basis data tempat kami akan mengimpor data (DataBase).

- Kami memilih opsi Salin data dari satu atau beberapa tabel atau tampilan (menyalin data dari tabel atau tampilan).

- Kami memilih tabel dari mana kami akan mengimpor skema database.

- Periksa Jalankan Segera dan klik Selesai.

- Selesai

- Akibatnya, tabel akan muncul di basis data DSC.

Mengkonfigurasi file .mdb "proxy"
Membuat koneksi ODBC ke server SQL. Diasumsikan bahwa MS Access tidak diinstal pada server dengan DSC, oleh karena itu konfigurasi database.mdb dilakukan pada host perantara dengan MS Access diinstal.
Mari kita membuat koneksi sistem ODBC ke server SQL (kedalaman bit koneksi harus sesuai dengan kedalaman bit MS Access - 64 atau 32). Itu dapat dibuat menggunakan:
- 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
- atau secara manual, menggunakan wizard koneksi:
- Buka alat administratif. Kami memilih sumber data ODBC tergantung pada versi MS Access yang diinstal. Buka tab System DSN dan buat koneksi sistem (Tambah).

- Kami mengindikasikan bahwa kami akan terhubung ke server SQL. Klik Selesai.

- Tentukan nama dan server yang akan dihubungkan. Kemudian koneksi dengan parameter yang sama perlu dibuat di server DSC.

- Kami menunjukkan bahwa untuk terhubung ke server SQL kami menggunakan login yang dibuat sebelumnya dengan nama DSC.

- Tentukan basis data dalam pengaturan koneksi DSC.

- Klik Selesai.

- Sebelum menyelesaikan pengaturan, kami memverifikasi bahwa koneksi berfungsi (Sumber Data Uji).

- Selesai

Membuat basis data devices.mdb di MS Access. Kami memulai MS Access dan membuat database kosong bernama devices.mdb.

- Buka tab Data Eksternal, klik pada ODBC Database. Di jendela yang muncul, pilih Buat tabel tertaut untuk komunikasi dengan sumber data.

- Di jendela baru, pilih tab Sumber Data Mesin dan klik OK. Di jendela baru, masukkan kredensial untuk menghubungkan ke server SQL.

- Kami memilih tabel yang perlu ditautkan. Kami mencentang dari kotak centang Simpan Kata Sandi dan klik OK. Kata sandi harus disimpan setiap waktu untuk ketiga tabel.

- Dalam indeks Anda harus memilih yang berikut:
- TargetName untuk tabel dbo_Devices;

- NodeName atau IPAddress untuk dbo_RegistrationData;

- NodeName atau IPAddress untuk dbo_StatusReport.

- Ganti nama tabel di MS Access, yaitu: hapus awalan dbo_ sehingga DSC dapat menggunakannya.

- Selesai

- Simpan file dan tutup MS Access. Sekarang salin devices.mdb yang dihasilkan ke server DSC (secara default di C: \ Program Files \ WindowsPowershell \ DSCService) dan ganti dengan yang ada (jika ada).
Mengkonfigurasi Server DSC untuk Menggunakan SQL
- Kami kembali ke server DSC. Untuk terhubung ke server SQL dengan file proxy kami, buat koneksi ODBC baru di server DSC. Pengaturan nama, kedalaman bit, dan koneksi harus sama dengan saat membuat file MDB. Anda dapat menyalin perangkat kosong yang sudah dikonfigurasikan.mdb dari sini.
- Untuk menggunakan devices.mdb, Anda perlu membuat perubahan pada web.config dari server DSC polling (secara default, C: \ inetpub \ PSDSCPullServer \ web.config):
- untuk 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;">
- untuk 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;">
Ini melengkapi pengaturan server DSC.
Memeriksa kesehatan server DSC
- Periksa apakah server DSC dapat diakses melalui browser web.

- Sekarang mari kita periksa apakah server DSC polling berfungsi dengan benar. Untuk melakukan ini, modul xPSDesiredStateConfiguration memiliki skrip pullserversetuptests.ps1. Sebelum menjalankan skrip ini, Anda harus menginstal modul Powershell bernama Pester. Pasang Instal-Modul -Nama Pester.
- Buka C: \ Program Files \ WindowsPowerShell \ Modul \ xPSDesiredStateConfiguration \ <versi modul> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (dalam contoh, versi 8.0.0.0.0).

- Buka PullServerSetupTests.ps1 dan periksa path ke web.config dari server DSC. Merah menyoroti jalur ke web.config, yang akan memeriksa skrip. Jika perlu, ubah jalur ini.

- Jalankan pullserversetuptests.ps1
Invoke-Pester. \ PullServerSetupTests.ps1
Semuanya berfungsi.

- Dalam SQL Management Studio, kita melihat bahwa host yang dikelola mengirim laporan ke server laporan DSC dan data masuk ke database DSC pada server SQL.

Itu saja. Dalam artikel berikut ini saya berencana untuk memberi tahu cara membuat laporan tentang data yang diterima, dan menyentuh pertanyaan tentang toleransi kesalahan dan skalabilitas.