共用方式為


設定 DSC SMB 提取伺服器

適用於:Windows PowerShell 4.0、Windows PowerShell 5.0

這很重要

提取伺服器 (Windows 功能 DSC 服務) 是 Windows Server 支援的元件,但沒有提供新功能或功能的計劃。 我們希望您知道,較新版本的 DSC 現已正式推出,由名為 來賓設定的 Azure 原則功能管理。 來賓設定服務結合了 DSC 延伸模組、Azure 自動化狀態設定的功能,以及客戶意見反應中最常要求的功能。 來賓設定也包括透過 已啟用 Arc 的伺服器的混合式機器支援。

DSC SMB 提取伺服器是裝載 SMB 檔案共用的電腦,可在目標節點要求時,讓 DSC 組態檔和 DSC 資源可供目標節點使用。

若要將 SMB 提取伺服器用於 DSC,您必須:

  • 在執行 PowerShell 4.0 或更新版本的伺服器上設定 SMB 檔案共用
  • 設定執行 PowerShell 4.0 或更新版本的用戶端,以從該 SMB 共用提取

使用 xSmbShare 資源建立 SMB 檔案共用

設定 SMB 檔案共用的方法有很多種,但讓我們看看如何使用 DSC 來執行此操作。

安裝 xSmbShare 資源

呼叫 Install-Module Cmdlet 來安裝 xSmbShare 模組。

備註

Install-Module 包含在 PowerShellGet 模組中,該模組包含在 PowerShell 5.0 中。 xSmbShare 包含 DSC 資源 xSmbShare,可用來建立 SMB 檔案共用。

建立目錄和檔案共用

下列設定會使用 File 資源來建立共用的目錄,並使用 xSmbShare 資源來設定 SMB 共用:

Configuration SmbShare
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xSmbShare

    Node localhost
    {

        File CreateFolder
        {
            DestinationPath = 'C:\DscSmbShare'
            Type = 'Directory'
            Ensure = 'Present'
        }

        xSMBShare CreateShare
        {
            Name = 'DscSmbShare'
            Path = 'C:\DscSmbShare'
            FullAccess = 'administrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'
        }
    }
}

組態會建立目錄 C:\DscSmbShare(如果尚不存在),然後使用該目錄作為 SMB 檔案共用。 應將 FullAccess 提供給需要寫入檔案共用或從檔案共用刪除的任何帳戶。 必須將 ReadAccess 提供給從共用取得組態和/或 DSC 資源的任何用戶端節點。

備註

DSC 預設會以系統帳戶的形式執行,因此電腦本身必須能夠存取共用。

授與提取用戶端的檔案系統存取權

ReadAccess 授與用戶端節點可讓該節點存取 SMB 共用,但無法存取該共用內的檔案或資料夾。 您必須明確授與用戶端節點對 SMB 共用資料夾和子資料夾的存取權。 我們可以使用 CNtfsAccessControl 模組中包含的 cNtfsPermissionEntry 資源新增,以使用 DSC 來執行此動作。 下列設定會新增 cNtfsPermissionEntry 區塊,以授與提取用戶端的 ReadAndExecute 存取權:

Configuration DSCSMB
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xSmbShare
    Import-DscResource -ModuleName cNtfsAccessControl

    Node localhost
    {

        File CreateFolder
        {
            DestinationPath = 'C:\DscSmbShare'
            Type = 'Directory'
            Ensure = 'Present'
        }

        xSMBShare CreateShare
        {
            Name = 'DscSmbShare'
            Path = 'C:\DscSmbShare'
            FullAccess = 'administrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'
        }

        cNtfsPermissionEntry PermissionSet1
        {
            Ensure = 'Present'
            Path = 'C:\DscSmbShare'
            Principal = 'myDomain\Contoso-Server$'
            AccessControlInformation = @(
                cNtfsAccessControlInformation
                {
                    AccessControlType = 'Allow'
                    FileSystemRights = 'ReadAndExecute'
                    Inheritance = 'ThisFolderSubfoldersAndFiles'
                    NoPropagateInherit = $false
                }
            )
            DependsOn = '[File]CreateFolder'
        }
    }
}

放置組態和資源

儲存您想要用戶端節點提取到 SMB 共用資料夾中的任何組態 MOF 檔案和/或 DSC 資源。

任何組態 MOF 檔案都必須命名 <ConfigurationID>.mof,其中 <ConfigurationID> 是目標節點 LCM 的 ConfigurationID 屬性值。 如需設定提取用戶端的相關資訊,請參閱 使用組態 ID 設定提取用戶端

備註

如果您使用 SMB 提取伺服器,則必須使用組態 ID。 SMB 不支援組態名稱。

每個資源模組都需要按照以下模式 {Module Name}_{Module Version}.zip進行壓縮和命名。 例如,模組版本為 3.1.2.0 的名為 xWebAdminstration 的模組將命名 xWebAdministration_3.2.1.0.zip為 。 模組的每個版本都必須包含在單一 zip 檔案中。 不支援 zip 檔案中模組的個別版本。 在封裝 DSC 資源模組以與提取伺服器搭配使用之前,您必須對目錄結構進行小型變更。

WMF 5.0 中包含 DSC 資源的模組預設格式是 {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\

在為提取伺服器打包之前,只需移除 {Module version} 資料夾,讓路徑變成 {Module Folder}\DscResources\{DSC Resource Folder}\。 透過這項變更,請如上所述壓縮資料夾,並將這些 zip 檔案放在 SMB 共用資料夾中。

建立 MOF 總和檢查碼

組態 MOF 檔案必須與總和檢查碼檔案配對,目標節點上的 LCM 才能驗證組態。 若要建立總和檢查碼,請呼叫 New-DSCCheckSum Cmdlet。 Cmdlet 會採用參數 Path ,以指定設定 MOF 所在的資料夾。 Cmdlet 會建立名為 ConfigurationMOFName.mof.checksum的總和檢查碼檔案,其中 ConfigurationMOFName 是組態 mof 檔案的名稱。 如果指定的資料夾中有多個組態 MOF 檔案,則會為資料夾中的每個組態建立總和檢查碼。

總和檢查碼檔案必須與組態 MOF 檔案 ($env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration 預設) 位於相同的目錄中,而且名稱相同,並 .checksum 附加副檔名。

備註

如果您以任何方式變更組態 MOF 檔案,也必須重新建立總和檢查碼檔案。

設定 SMB 的提取用戶端

若要設定從 SMB 共用提取組態和/或資源的用戶端,您可以使用 ConfigurationRepositoryShareResourceRepositoryShare 區塊來設定用戶端的本機組態管理員 (LCM),以指定要從中提取組態和 DSC 資源的共用。

如需設定 LCM 的詳細資訊,請參閱 使用組態 ID 設定提取用戶端

備註

為了簡單起見,此範例使用 PSDscAllowPlainTextPassword 來允許將純文字密碼傳遞至 Credential 參數。 如需更安全地傳遞認證的資訊,請參閱 組態資料中的認證選項您必須在 SMB 提取伺服器的中繼組態的 [設定] 區塊中指定 ConfigurationID,即使您只是提取資源也一樣。

$secpasswd = ConvertTo-SecureString "Pass1Word" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("TestUser", $secpasswd)

[DSCLocalConfigurationManager()]
configuration SmbCredTest
{
    Node $AllNodes.NodeName
    {
        Settings
        {
            RefreshMode = 'Pull'
            RefreshFrequencyMins = 30
            RebootNodeIfNeeded = $true
            ConfigurationID    = '16db7357-9083-4806-a80c-ebbaf4acd6c1'
        }

         ConfigurationRepositoryShare SmbConfigShare
        {
            SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
            Credential = $mycreds
        }

        ResourceRepositoryShare SmbResourceShare
        {
            SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
            Credential = $mycreds

        }
    }
}

$ConfigurationData = @{
    AllNodes = @(
        @{
            #the "*" means "all nodes named in ConfigData" so we don't have to repeat ourselves
            NodeName="localhost"
            PSDscAllowPlainTextPassword = $true
        })
}

致謝

特別感謝以下人士:

  • Mike F. Robbins,他關於使用 SMB 進行 DSC 的帖子有助於為本主題的內容提供信息。 他的博客位於 Mike F Robbins
  • Serge Nikalaichyk,他撰寫了 cNtfsAccessControl 模組。 此模組的來源位於 cNtfsAccessControl

另請參閱

Windows PowerShell 所需狀態設定概觀

制定組態

使用組態 ID 設定提取用戶端