PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

當您擁有數百台伺服器時,PowerShell Desired State Configuration (DSC) 大幅簡化了部署和設定作業系統、伺服器角色和應用程式的工作。

但在本地使用 DSC 時,即與 MS Azure 不同,存在一些細微差別。 如果組織規模較大(擁有 300 個工作站和伺服器)並且尚未發現容器世界,那麼它們尤其引人注目:

  • 沒有關於系統狀態的完整報告。 如果某些伺服器上尚未套用所需的配置,那麼如果沒有這些報告,我們將無法得知。 從內建的報告伺服器取得資訊相當困難,對於大量主機來說也可能需要很長時間。
  • 缺乏可擴展性和容錯能力。 不可能建立一個 DSC 拉式 Web 伺服器場,該伺服器場具有單一容錯資料庫以及用於配置、模組和註冊金鑰的 mof 檔案的公共儲存。

今天我將告訴您如何解決第一個問題並取得用於報告的資料。 如果可以使用 SQL 作為資料庫,一切都會變得更簡單。 多發性硬化症 承諾 僅在 Windows Server 2019 或 Windows Server 1803 版本中內建支援。也使用 OleDB 提供者取得數據 不行因為 DSC Server 使用 OleDbCommand 不完全支援的命名參數。

我找到了這個方法:對於使用Windows Server 2012和2016的人,可以 設置 使用 SQL 資料庫作為 DSC 查詢伺服器的後端。 為此,我們將以 .mdb 檔案形式建立一個具有關聯表的“代理”,它將將從客戶端報告接收到的資料重定向到 SQL Server 資料庫。

注意:對於 Windows Server 2016,您必須使用 Access資料庫引擎2016x86因為不再支援 Microsoft.Jet.OLEDB.4.0。

我不會詳細介紹部署 DSC Pull 伺服器的過程,它已經描述得很好了 這裡。 我只想指出幾點。 如果我們將 DSC Puller 部署在與 WSUS 或 Kaspersky Security Center 相同的 Web 伺服器上,則在設定建立腳本中我們需要變更以下參數:

  1. UseSecurityBestPractices     = $false

    否則,TLS 1.0 將被停用,您將無法連線到 SQL 資料庫。 Kaspersky Security Center 也將無法運作(該問題應在 Kaspersky Security Center v11 中解決)。

  2. Enable32BitAppOnWin64   = $true

    如果不進行此更改,您將無法在具有 WSUS 的 IIS 上執行 AppPool DSC 伺服器。

  3. 使用 WSUS 安裝 DSC 伺服器時,停用 DSC 網站的靜態和動態快取。

讓我們繼續設定 DSC 伺服器以使用 SQL 資料庫。

建立 SQL 資料庫

  1. 讓我們建立一個名為 DSC 的空 SQL 資料庫。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  2. 讓我們建立一個帳戶來連接到該資料庫。 首先,檢查 SQL Server 是否允許對 Windows 和 SQL 帳戶進行驗證。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  3. 轉到用戶映射部分。 選擇資料庫,在本例中為 DSC。 我們賦予資料庫所有者的權利。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  4. 完成。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

為 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 中。

  1. 若要匯入數據,請執行 SQL Server 匯入和匯出精靈。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  2. 我們選擇從哪裡取得資料 - 在我們的範例中是 Microsoft Access 資料庫。 點擊下一步。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  3. 選擇我們從中匯入圖表的檔案。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  4. 我們指示導入位置 - 對我們來說它是一個 SQL 資料庫。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  5. 選擇 SQL 伺服器(伺服器名稱)和我們將匯入資料的資料庫(資料庫)。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  6. 選擇選項從一個或多個表或視圖複製資料(從表或視圖複製資料)。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  7. 我們選擇將從中匯入資料庫模式的表。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  8. 選取立即運行複選框並按完成。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  9. 完成。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  10. 因此,表格應出現在 DSC 資料庫中。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

設定 .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

— 或使用連接精靈手動:

  1. 開啟管理工具。 我們根據安裝的 MS Access 的版本選擇 ODBC 資料來源。 轉到系統 DSN 標籤並建立系統連接(新增)。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  2. 我們表明我們將連接到 SQL 伺服器。 按一下“完成”。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  3. 指定要連接的名稱和伺服器。 然後需要在 DSC 伺服器上建立具有相同參數的連線。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  4. 我們指出,要連接到 SQL Server,我們使用先前建立的名為 DSC 的登入名稱。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  5. 我們在 DSC 連線設定中指定資料庫。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  6. 按一下“完成”。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  7. 在完成設定之前,我們檢查連線是否正常運作(測試資料來源)。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  8. 完成。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

在 MS Access 中建立 devices.mdb 資料庫。 啟動 MS Access 並建立一個名為 devices.mdb 的空資料庫。

PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  1. 轉到“外部資料”標籤並點擊“ODBC 資料庫”。 在出現的視窗中,選擇建立連結表以連接到資料來源。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  2. 在新視窗中,選擇“機器資料來源”選項卡,然後按一下“確定”。 在新視窗中,輸入連接到 SQL Server 的憑證。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  3. 選擇需要連結的表格。 選取“儲存密碼”方塊並按“確定”。 每次保存所有三個表的密碼。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  4. 在索引中,您需要選擇以下內容:
    — dbo_Devices 表的 TargetName;

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

    — dbo_RegistrationData 的節點名稱或 IP 位址;

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

    — dbo_StatusReport 的節點名稱或 IP 位址。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  5. 讓我們重新命名 MS Access 中的表,即:刪除 dbo_ 前綴,以便 DSC 可以使用它們。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  6. 完成。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  7. 儲存檔案並關閉 MS Access。 現在,我們將產生的 devices.mdb 複製到 DSC 伺服器(預設位於 C:Program FilesWindowsPowershellDSCService 中)並用它取代現有的(如果存在)。

配置 DSC 伺服器以使用 SQL

  1. 我們返回 DSC 伺服器。 要使用我們的代理檔案連接到 SQL 伺服器,讓我們在 DSC 伺服器上建立一個新的 ODBC 連線。 名稱、位元深度和連接設定必須與建立 MDB 檔案時相同。 您可以從此處複製已配置的空 devices.mdb。
  2. 若要使用 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 伺服器的功能

  1. 讓我們檢查一下 DSC 伺服器是否可以透過 Web 瀏覽器存取。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  2. 現在讓我們檢查 DSC 拉取伺服器是否正常運作。 為此,xPSDesiredStateConfiguration 模組包含 pullserversetuptests.ps1 腳本。 在執行此腳本之前,您必須安裝名為 Pester 的 Powershell 模組。 安裝它 Install-Module -Name Pester。
  3. 開啟 C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfiguration<模組版本>DSCPullServerSetupPullServerDeploymentVerificationTest(在範例版本 8.0.0.0.0 中)。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  4. 開啟 PullServerSetupTests.ps1 並檢查 DSC 伺服器的 web.config 路徑。 將檢查腳本的 web.config 的路徑以紅色突出顯示。 如有必要,我們會更改此路徑。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  5. 運行 pullserversetuptests.ps1
    呼叫-Pester.PullServerSetupTests.ps1
    Всеработает。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

  6. 在 SQL Management Studio 中,我們看到受管理的主機將報告傳送到 DSC 報告伺服器,並且資料最終儲存在 SQL 伺服器上的 DSC 資料庫中。

    PowerShell 所需狀態設定和檔案:第 1 部分:設定 DSC 拉取伺服器以使用 SQL 資料庫

就這樣。 在接下來的文章中,我計劃告訴您如何根據獲得的數據建立報告,並且我將涉及有關容錯性和可擴展性的問題。

來源: www.habr.com

添加評論