Configurações DSCDSC Configurations

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

As configurações DSC são scripts do PowerShell que definem um tipo especial de função.DSC configurations are PowerShell scripts that define a special type of function. Para definir uma configuração utilize a palavra-chave do PowerShell Configuration.To define a configuration, you use the PowerShell keyword Configuration.

Configuration MyDscConfiguration {

    Node "TEST-PC1" {
        WindowsFeature MyFeatureInstance {
            Ensure = "Present"
            Name =  "RSAT"
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = "Present"
            Name = "Bitlocker"
        }
    }
} 

MyDscConfiguration 

Salve o script como um arquivo .ps1.Save the script as a .ps1 file.

Sintaxe da configuraçãoConfiguration syntax

Um script de configuração é composto por estas partes:A configuration script consists of the following parts:

  • O bloco Configuration.The Configuration block. É o bloco de script externo.This is the outermost script block. Para defini-lo, use a palavra-chave Configuration e forneça um nome.You define it by using the Configuration keyword and providing a name. Nesse caso, o nome da configuração é "MyDscConfiguration".In this case, the name of the configuration is "MyDscConfiguration".
  • Um ou mais blocos de .One or more Node blocks. Definem os nós (computadores ou máquinas virtuais) que você está configurando.These define the nodes (computers or VMs) that you are configuring. Na configuração acima, há um bloco de que tem como destino um computador denominado "TEST-PC1".In the above configuration, there is one Node block that targets a computer named "TEST-PC1".
  • Um ou mais blocos de recurso.One or more resource blocks. É onde a configuração define as propriedades para os recursos que estão sendo configurados.This is where the configuration sets the properties for the resources that it is configuring. Nesse caso, há dois blocos de recurso; cada um deles chama o recurso "WindowsFeature".In this case, there are two resource blocks, each of which call the "WindowsFeature" resource.

Dentro de um bloco de configuração, é possível fazer qualquer coisa que normalmente poderia ser feita em uma função do PowerShell.Within a Configuration block, you can do anything that you normally could in a PowerShell function. No exemplo anterior, se você não quisesse embutir em código o nome do computador de destino na configuração, poderia adicionar um parâmetro para o nome do nó:For example, in the previous example, if you didn't want to hard code the name of the target computer in the configuration, you could add a parameter for the node name:

Configuration MyDscConfiguration {

    param(
        [string[]]$ComputerName="localhost"
    )
    Node $ComputerName {
        WindowsFeature MyFeatureInstance {
            Ensure = "Present"
            Name =  "RSAT"
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = "Present"
            Name = "Bitlocker"
        }
    }
}

MyDscConfiguration 

Neste exemplo, você especifica o nome do nó passando-o como o parâmetro ComputerName quando compila a configuração.In this example, you specify the name of the node by passing it as the ComputerName parameter when you compile the configuraton. O nome padrão é "localhost".The name defaults to "localhost".

Compilando a configuraçãoCompiling the configuration

Para poder aplicar uma configuração, você precisa compilá-la em um documento MOF.Before you can enact a configuration, you have to compile it into a MOF document. Chame a configuração como chamaria uma função do PowerShell.You do this by calling the configuration like you would a PowerShell function.
A última linha do exemplo contendo somente o nome da configuração, chama a configuração.The last line of the example containing only the name of the configuration, calls the configuration.

Observação: para chamar uma configuração, a função precisa estar no escopo global (como acontece com qualquer outra função do PowerShell).Note: To call a configuration, the function must be in global scope (as with any other PowerShell function). Isso pode ser feito por meio de "dot-sourcing" do script ou ao executar o script de configuração usando F5 ou clicando no botão Executar Script no ISE.You can make this happen either by "dot-sourcing" the script, or by running the configuration script by using F5 or clicking on the Run Script button in the ISE. Para fazer o dot-source do script, execute o comando . .\myConfig.ps1, em que myConfig.ps1 é o nome do arquivo de script que contém sua configuração.To dot-source the script, run the command . .\myConfig.ps1 where myConfig.ps1 is the name of the script file that contains your configuration.

Quando você chama a configuração, ela:When you call the configuration, it:

  • Resolve todas as variáveisResolves all variables
  • Uma pasta no diretório atual com o mesmo nome que a configuração.Creates a folder in the current directory with the same name as the configuration.
  • Um arquivo chamado NodeName.mof no novo diretório, em que NodeName é o nome do nó de destino da configuração.Creates a file named NodeName.mof in the new directory, where NodeName is the name of the target node of the configuration. Se houver mais de um nó, será criado um arquivo MOF para cada nó.If there are more than one nodes, a MOF file will be created for each node.

Observação: o arquivo MOF contém todas as informações de configuração para o nó de destino.Note: The MOF file contains all of the configuration information for the target node. Por isso, é importante mantê-lo seguro.Because of this, it’s important to keep it secure. Para obter mais informações, consulte Protegendo o arquivo MOF.For more information, see Securing the MOF file.

A compilação da primeira configuração acima resulta na seguinte estrutura de pastas:Compiling the first configuration above results in the following folder structure:

. .\MyDscConfiguration.ps1
MyDscConfiguration
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name                                                                                              
----                -------------         ------ ----                                                                                         
-a----       10/23/2015   4:32 PM           2842 TEST-PC1.mof

Se a configuração utilizar um parâmetro, como no segundo exemplo, ele precisará ser fornecido no tempo de compilação.If the configuration takes a parameter, as in the second example, that has to be provided at compile time. A aparência deveria ser esta:Here's how that would look:

. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name                                                                                              
----                -------------         ------ ----                                                                                         
-a----       10/23/2015   4:32 PM           2842 MyTestNode.mof

Usando o DependsOnUsing DependsOn

Uma palavra-chave útil da DSC é DependsOn.A useful DSC keyword is DependsOn. Normalmente (mas nem sempre), a DSC aplica os recursos na ordem em que aparecem dentro da configuração.Typically (though not necessarily always), DSC applies the resources in the order that they appear within the configuration. Contudo, o DependsOn especifica quais recursos dependem de outros recursos, enquanto o LCM garante que sejam aplicados na ordem correta, independentemente da ordem na qual as instâncias de recurso são definidas.However, DependsOn specifies which resources depend on other resources, and the LCM ensures that they are applied in the correct order, regardless of the order in which resource instances are defined. Por exemplo, uma configuração pode especificar que uma instância do recurso User depende da existência de uma instância Group:For example, a configuration might specify that an instance of the User resource depends on the existence of a Group instance:

Configuration DependsOnExample {
    Node Test-PC1 {
        Group GroupExample {
            Ensure = "Present"
            GroupName = "TestGroup"
        }

        User UserExample {
            Ensure = "Present"
            UserName = "TestUser"
            FullName = "TestUser"
            DependsOn = "[Group]GroupExample"
        }
    }
}

DependsOnExample

Uso de novos recursos na sua configuraçãoUsing new resources in Your configuration

Se você executou os exemplos anteriores, talvez tenha notado que foi informado que estava usando um recurso sem importá-lo explicitamente.If you ran the previous examples, you might have noticed that you were warned that you were using a resource without explicitly importing it. Atualmente, a DSC vem com 12 recursos como parte do módulo PSDesiredStateConfiguration.Today, DSC ships with 12 resources as part of the PSDesiredStateConfiguration module. Outros recursos em módulos externos devem ser colocados em $env:PSModulePath para serem reconhecidos pelo LCM.Other resources in external modules must be placed in $env:PSModulePath in order to be recognized by the LCM. Um novo cmdlet, Get-DscResource, pode ser usado para determinar quais recursos estão instalados no sistema e disponíveis para uso pelo LCM.A new cmdlet, Get-DscResource, can be used to determine what resources are installed on the system and available for use by the LCM. Depois que esses módulos forem colocados em $env:PSModulePath e reconhecidos adequadamente pelo Get-DscResource, ainda precisam ser carregados na sua configuração.Once these modules have been placed in $env:PSModulePath and are properly recognized by Get-DscResource, they still need to be loaded within your configuration. Import-DscResource é uma palavra-chave dinâmica que pode ser reconhecida apenas dentro de um bloco de configuração (ou seja, não é um cmdlet).Import-DscResource is a dynamic keyword that can only be recognized within a Configuration block (i.e. it is not a cmdlet). O Import-DscResource dá suporte a dois parâmetros:Import-DscResource supports two parameters:

  • ModuleName é a forma recomendada de usar o Import-DscResource.ModuleName is the recommended way of using Import-DscResource. Aceita o nome do módulo que contém os recursos que serão importados (assim como uma matriz de cadeia de caracteres de nomes de módulos).It accepts the name of the module that contains the resources to be imported (as well as a string array of module names).
  • Name é o nome do recurso que será importado.Name is the name of the resource to import. Não é o nome amigável gerado como "Name" pelo Get-DscResource, mas o nome de classe usado na hora de definir o esquema de recurso (gerado como ResourceType pelo Get-DscResource).This is not the friendly name returned as "Name" by Get-DscResource, but the class name used when defining the resource schema (returned as ResourceType by Get-DscResource).

Consulte TambémSee Also