Configurando um servidor de pull de SMB para DSCSetting up a DSC SMB pull server

Aplica-se a: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

Um servidor de pull do SMB é um computador que hospeda compartilhamentos de arquivo SMB que disponibilizam arquivos de configuração DSC e/ou recursos de DSC para nós de destino quando esses nós os solicitam.A DSC SMB pull server is a computer hosting SMB file shares that make DSC configuration files and DSC resources available to target nodes when those nodes ask for them.

Para usar um servidor de pull de SMB para DSC, você precisa:To use an SMB pull server for DSC, you have to:

  • Configurar um compartilhamento de arquivos SMB em um servidor executando o PowerShell 4.0 ou superiorSet up an SMB file share on a server running PowerShell 4.0 or higher
  • Configurar um cliente executando o PowerShell 4.0 ou superior para efetuar pull desse compartilhamento SMBConfigure a client running PowerShell 4.0 or higher to pull from that SMB share

Usando o recurso xSmbShare para criar um compartilhamento de arquivos SMBUsing the xSmbShare resource to create an SMB file share

Há várias maneiras para configurar um compartilhamento de arquivos SMB, mas vamos ver como você pode fazer isso usando DSC.There are a number of ways to set up an SMB file share, but let's look at how you can do this by using DSC.

Instalar o recurso xSmbShareInstall the xSmbShare resource

Chame o cmdlet Install-Module para instalar o módulo xSmbShare.Call the Install-Module cmdlet to install the xSmbShare module.

Observação: Install-Module está incluído no módulo PowerShellGet, que está incluído no PowerShell 5.0.Note: Install-Module is included in the PowerShellGet module, which is included in PowerShell 5.0. É possível baixar o módulo PowerShellGet para o PowerShell 3.0 e 4.0 em Visualização de Módulos do PowerShell do PackageManagement.You can download the PowerShellGet module for PowerShell 3.0 and 4.0 at PackageManagement PowerShell Modules Preview. O xSmbShare contém o recurso de DSC xSmbShare, que pode ser usado para criar um compartilhamento de arquivo SMB.The xSmbShare contains the DSC resource xSmbShare, which can be used to create an SMB file share.

Criar o diretório e o compartilhamento de arquivosCreate the directory and file share

A configuração a seguir usa o recurso File para criar o diretório para o compartilhamento e o recurso xSmbShare para configurar o compartilhamento SMB:The following configuration uses the File resource to create the directory for the share and the xSmbShare resource to set up the SMB share:

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 = 'admininstrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'

        }

    }

}

A configuração cria o diretório C:\DscSmbShare se ele ainda não existir e, em seguida, usa esse diretório como um compartilhamento de arquivos SMB.The configuration creates the directory C:\DscSmbShare if it doesn't already exists, and then uses that directory as an SMB file share. FullAccess deve ser fornecido a qualquer conta que precise gravar no compartilhamento de arquivo ou excluir algo dele e ReadAccess deve ser fornecido a qualquer nó de cliente que obterá configurações e/ou recursos de DSC do compartilhamento (isso porque o DSC é executado como a conta do sistema por padrão, de modo que o computador em si precisa ter acesso ao compartilhamento).FullAccess should be given to any account that needs to write to or delete from the file share, and ReadAccess must be given to any client nodes that get configurations and/or DSC resources from the share ( this is because DSC runs as the system account by default, so the computer itself has to have access to the share).

Conceder acesso ao sistema de arquivos para o cliente de pullGive file system access to the pull client

Conceder ReadAccess para um nó do cliente permite que esse nó acesse o compartilhamento SMB, mas não arquivos ou pastas dentro desse compartilhamento.Giving ReadAccess to a client node allows that node to access the SMB share, but not to files or folders within that share. Você precisa conceder explicitamente aos nós do cliente acesso à pasta e às subpastas de compartilhamento SMB.You have to explicitly grant client nodes access to the SMB share folder and sub-folders. Podemos fazer isso com o DSC adicionando/usando o recurso cNtfsPermissionEntry, que está contido no módulo CNtfsAccessControl.We can do this with DSC by adding using the cNtfsPermissionEntry resource, which is contained in the CNtfsAccessControl module. A configuração a seguir adiciona um bloco cNtfsPermissionEntry, que concede acesso ReadAndExecute ao cliente de pull:The following configuration adds a cNtfsPermissionEntry block that grants ReadAndExecute access to the pull client:

Configuration DSCSMB {

Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xSmbShare
Import-DscResource -ModuleName cNtfsAccessControl

    Node localhost {

        File CreateFolder {

            DestinationPath = 'DscSmbShare'
            Type = 'Directory'
            Ensure = 'Present'

        }

        xSMBShare CreateShare {

            Name = 'DscSmbShare'
            Path = 'DscSmbShare'
            FullAccess = 'administrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'

        }

        cNtfsPermissionEntry PermissionSet1 {

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

        }


    }

}

Colocando configurações e recursosPlacing configurations and resources

Salve todos os arquivos MOF de configuração e/ou recursos DSC que você deseja que sejam obtidos por pull do compartilhamento de pasta SMB pelos nós do cliente.Save any configuration MOF files and/or DSC resources that you want client nodes to pull in the SMB share folder.

O arquivo MOF de configuração no servidor de pull deve ser nomeado como ConfigurationID.mof, em que ConfigurationID é o valor da propriedade ConfigurationID do LCM do nó de destino.Any configuration MOF file must be named ConfigurationID.mof, where ConfigurationID is the value of the ConfigurationID property of the target node's LCM. Para obter mais informações sobre como configurar clientes de pull, confira Configurando um cliente de pull usando uma ID de configuração.For more information about setting up pull clients, see Setting up a pull client using configuration ID.

Observação: você deverá usar IDs de configuração se estiver usando um servidor de pull de SMB.Note: You must use configuration IDs if you are using an SMB pull server. Não há suporte para nomes de configuração para SMB.Configuration names are not supported for SMB.

Cada módulo de recurso precisa ser compactado e nomeado de acordo com o padrão a seguir {Module Name}_{Module Version}.zip.Each resource module needs to be zipped and named according the the following pattern {Module Name}_{Module Version}.zip. Por exemplo, um módulo chamado xWebAdminstration com uma versão do módulo correspondente a 3.1.2.0 seria nomeado 'xWebAdministration_3.2.1.0.zip'.For example, a module named xWebAdminstration with a module version of 3.1.2.0 would be named 'xWebAdministration_3.2.1.0.zip'. Cada versão de um módulo deve estar contido em um único arquivo zip.Each version of a module must be contained in a single zip file. Como há apenas uma única versão de um recurso em cada arquivo zip, não há suporte para o formato do módulo adicionado ao WMF 5.0 com suporte para várias versões de módulo em um único diretório.Since there is only a single version of a resource in each zip file the module format added in WMF 5.0 with support for multiple module versions in a single directory is not supported. Isso significa que antes de empacotar módulos de recursos DSC para uso com o servidor de pull, você precisará fazer uma pequena alteração na estrutura de diretórios.This means that before packaging up DSC resource modules for use with pull server you need to make a small change to the directory structure. O formato padrão dos módulos contendo o recurso DSC no WMF 5.0 é '{Pasta do Módulo}{{Versão do Módulo}\DscResources{{Pasta do Recurso DSC}\'.The default format of modules containing DSC resource in WMF 5.0 is '{Module Folder}{Module Version}\DscResources{DSC Resource Folder}\'. Antes do empacotamento para o servidor de pull, simplesmente remova a pasta {Versão do módulo} de modo que o caminho se torne '{Pasta do Módulo}\DscResources{{Pasta do Recurso DSC}\'.Before packaging up for the pull server simply remove the {Module version} folder so the path becomes '{Module Folder}\DscResources{DSC Resource Folder}\'. Com essa alteração, compacte a pasta conforme descrito acima e coloque esses arquivos zip na pasta de compartilhamento SMB.With this change, zip the folder as described above and place these zip files in the SMB share folder.

Criando a soma de verificação de MOFCreating the MOF checksum

Um arquivo MOF de configuração precisa ser emparelhado com um arquivo de soma de verificação para que um LCM em um nó de destino possa validar a configuração.A configuration MOF file needs to be paired with a checksum file so that an LCM on a target node can validate the configuration. Para criar uma soma de verificação, chame o cmdlet New-DSCCheckSum.To create a checksum, call the New-DSCCheckSum cmdlet. O cmdlet usa um parâmetro Path que especifica a pasta na qual se encontra o MOF de configuração.The cmdlet takes a Path parameter that specifies the folder where the configuration MOF is located. O cmdlet cria um arquivo de soma de verificação chamado ConfigurationMOFName.mof.checksum, em que ConfigurationMOFName é o nome do arquivo MOF de configuração.The cmdlet creates a checksum file named ConfigurationMOFName.mof.checksum, where ConfigurationMOFName is the name of the configuration mof file. Se houver mais de um arquivo MOF de configuração na pasta especificada, será criada uma soma de verificação para cada configuração na pasta.If there are more than one configuration MOF files in the specified folder, a checksum is created for each configuration in the folder.

O arquivo de soma de verificação deve estar presente no mesmo diretório em que o arquivo MOF de configuração ($env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration por padrão) e ter o mesmo nome com a extensão .checksum anexada.The checksum file must be present in the same directory as the configuration MOF file ($env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration by default), and have the same name with the .checksum extension appended.

Observação: se alterar o arquivo MOF de configuração de qualquer forma, você também deverá recriar o arquivo de soma de verificação.Note: If you change the configuration MOF file in any way, you must also recreate the checksum file.

Configurando um cliente de pull para SMBSetting up a pull client for SMB

Para configurar um cliente que recebe as configurações e/ou recursos de um compartilhamento SMB, você configura o LCM (Gerenciador de Configurações Local) do cliente com blocos ConfigurationRepositoryShare e ResourceRepositoryShare que especificam o compartilhamento do qual efetuar o configurações de pull e recursos DSC.To set up a client that pulls configurations and/or resources from an SMB share, you configure the client's Local Configuration Manager (LCM) with ConfigurationRepositoryShare and ResourceRepositoryShare blocks that specify the share from which to pull configurations and DSC resources.

Para obter mais informações sobre como configurar um LCM, consulte Configurando um cliente de pull usando a ID de configuração.For more information about configuring the LCM, see Setting up a pull client using configuration ID.

Observação: para simplificar, este exemplo usa o PSDscAllowPlainTextPassword para permitir a passagem de uma senha de texto não criptografado para o parâmetro Credencial.Note: For simplicity, this example uses the PSDscAllowPlainTextPassword to allow passing a plaintext password to the Credential parameter. Para obter informações sobre como passar credenciais de forma mais segura, consulte Opções de Credenciais nos Dados de Configuração.For information about passing credentials more securely, see Credentials Options in Configuration Data.

Observação: você deve especificar uma ConfigurationID no bloco Configurações de uma metaconfiguração de um servidor de pull de SMB, mesmo que só esteja extraindo recursos.Note: You must specify a ConfigurationID in the Settings block of a metaconfiguration for an SMB pull server, even if you are only pulling resources.

$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

        })



}

AgradecimentosAcknowledgements

Agradecimentos especiais às pessoas a seguir:Special thanks to the following:

Consulte tambémSee also