當您擁有數百台伺服器時,PowerShell Desired State Configuration (DSC) 大幅簡化了部署和設定作業系統、伺服器角色和應用程式的工作。
但在本地使用 DSC 時,即與 MS Azure 不同,存在一些細微差別。 如果組織規模較大(擁有 300 個工作站和伺服器)並且尚未發現容器世界,那麼它們尤其引人注目:
- 沒有關於系統狀態的完整報告。 如果某些伺服器上尚未套用所需的配置,那麼如果沒有這些報告,我們將無法得知。 從內建的報告伺服器取得資訊相當困難,對於大量主機來說也可能需要很長時間。
- 缺乏可擴展性和容錯能力。 不可能建立一個 DSC 拉式 Web 伺服器場,該伺服器場具有單一容錯資料庫以及用於配置、模組和註冊金鑰的 mof 檔案的公共儲存。
今天我將告訴您如何解決第一個問題並取得用於報告的資料。 如果可以使用 SQL 作為資料庫,一切都會變得更簡單。 多發性硬化症
我找到了這個方法:對於使用Windows Server 2012和2016的人,可以
注意:對於 Windows Server 2016,您必須使用
我不會詳細介紹部署 DSC Pull 伺服器的過程,它已經描述得很好了
-
UseSecurityBestPractices = $false
否則,TLS 1.0 將被停用,您將無法連線到 SQL 資料庫。 Kaspersky Security Center 也將無法運作(該問題應在 Kaspersky Security Center v11 中解決)。
-
Enable32BitAppOnWin64 = $true
如果不進行此更改,您將無法在具有 WSUS 的 IIS 上執行 AppPool DSC 伺服器。
- 使用 WSUS 安裝 DSC 伺服器時,停用 DSC 網站的靜態和動態快取。
讓我們繼續設定 DSC 伺服器以使用 SQL 資料庫。
建立 SQL 資料庫
- 讓我們建立一個名為 DSC 的空 SQL 資料庫。
- 讓我們建立一個帳戶來連接到該資料庫。 首先,檢查 SQL Server 是否允許對 Windows 和 SQL 帳戶進行驗證。
- 轉到用戶映射部分。 選擇資料庫,在本例中為 DSC。 我們賦予資料庫所有者的權利。
- 完成。
為 DSC 資料庫建立架構
有兩種方法可以為 DSC 資料庫建立架構:
- 透過 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
- 透過 SQL 資料匯入精靈從空 devices.mdb 匯入資料作為 PS 模組 PSDesiredStateConfiguration 的一部分。
我們將使用的 Devices.mdb 位於 C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer 中。
- 若要匯入數據,請執行 SQL Server 匯入和匯出精靈。
- 我們選擇從哪裡取得資料 - 在我們的範例中是 Microsoft Access 資料庫。 點擊下一步。
- 選擇我們從中匯入圖表的檔案。
- 我們指示導入位置 - 對我們來說它是一個 SQL 資料庫。
- 選擇 SQL 伺服器(伺服器名稱)和我們將匯入資料的資料庫(資料庫)。
- 選擇選項從一個或多個表或視圖複製資料(從表或視圖複製資料)。
- 我們選擇將從中匯入資料庫模式的表。
- 選取立即運行複選框並按完成。
- 完成。
- 因此,表格應出現在 DSC 資料庫中。
設定 .mdb“代理”文件
建立到 SQL 伺服器的 ODBC 連線。 假定執行 DSC 的伺服器上未安裝 MS Access,因此在安裝了 MS Access 的中間主機上設定資料庫.mdb。
讓我們建立一個到 SQL Server 的系統 ODBC 連線(連線位數必須與 MS Access 位數相符 - 64 或 32)。 它可以使用以下方法建立:
- Powershell cmdlet:
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
— 或使用連接精靈手動:
- 開啟管理工具。 我們根據安裝的 MS Access 的版本選擇 ODBC 資料來源。 轉到系統 DSN 標籤並建立系統連接(新增)。
- 我們表明我們將連接到 SQL 伺服器。 按一下“完成”。
- 指定要連接的名稱和伺服器。 然後需要在 DSC 伺服器上建立具有相同參數的連線。
- 我們指出,要連接到 SQL Server,我們使用先前建立的名為 DSC 的登入名稱。
- 我們在 DSC 連線設定中指定資料庫。
- 按一下“完成”。
- 在完成設定之前,我們檢查連線是否正常運作(測試資料來源)。
- 完成。
在 MS Access 中建立 devices.mdb 資料庫。 啟動 MS Access 並建立一個名為 devices.mdb 的空資料庫。
- 轉到“外部資料”標籤並點擊“ODBC 資料庫”。 在出現的視窗中,選擇建立連結表以連接到資料來源。
- 在新視窗中,選擇“機器資料來源”選項卡,然後按一下“確定”。 在新視窗中,輸入連接到 SQL Server 的憑證。
- 選擇需要連結的表格。 選取“儲存密碼”方塊並按“確定”。 每次保存所有三個表的密碼。
- 在索引中,您需要選擇以下內容:
— dbo_Devices 表的 TargetName;
— dbo_RegistrationData 的節點名稱或 IP 位址;
— dbo_StatusReport 的節點名稱或 IP 位址。 - 讓我們重新命名 MS Access 中的表,即:刪除 dbo_ 前綴,以便 DSC 可以使用它們。
- 完成。
- 儲存檔案並關閉 MS Access。 現在,我們將產生的 devices.mdb 複製到 DSC 伺服器(預設位於 C:Program FilesWindowsPowershellDSCService 中)並用它取代現有的(如果存在)。
配置 DSC 伺服器以使用 SQL
- 我們返回 DSC 伺服器。 要使用我們的代理檔案連接到 SQL 伺服器,讓我們在 DSC 伺服器上建立一個新的 ODBC 連線。 名稱、位元深度和連接設定必須與建立 MDB 檔案時相同。 您可以從此處複製已配置的空 devices.mdb。
- 若要使用 devices.mdb,您需要變更 DSC 拉取伺服器的 web.config(預設為 C:inetpubPSDSCPullServerweb.config):
- 適用於 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;">
- 適用於 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;">
這樣就完成了 DSC 伺服器設定。
檢查 DSC 伺服器的功能
- 讓我們檢查一下 DSC 伺服器是否可以透過 Web 瀏覽器存取。
- 現在讓我們檢查 DSC 拉取伺服器是否正常運作。 為此,xPSDesiredStateConfiguration 模組包含 pullserversetuptests.ps1 腳本。 在執行此腳本之前,您必須安裝名為 Pester 的 Powershell 模組。 安裝它 Install-Module -Name Pester。
- 開啟 C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfiguration<模組版本>DSCPullServerSetupPullServerDeploymentVerificationTest(在範例版本 8.0.0.0.0 中)。
- 開啟 PullServerSetupTests.ps1 並檢查 DSC 伺服器的 web.config 路徑。 將檢查腳本的 web.config 的路徑以紅色突出顯示。 如有必要,我們會更改此路徑。
- 運行 pullserversetuptests.ps1
呼叫-Pester.PullServerSetupTests.ps1
Всеработает。 - 在 SQL Management Studio 中,我們看到受管理的主機將報告傳送到 DSC 報告伺服器,並且資料最終儲存在 SQL 伺服器上的 DSC 資料庫中。
就這樣。 在接下來的文章中,我計劃告訴您如何根據獲得的數據建立報告,並且我將涉及有關容錯性和可擴展性的問題。
來源: www.habr.com