Configurações DSC

Aplica-se a: 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. Para definir uma configuração utilize a palavra-chave do PowerShell 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.

Sintaxe da configuração

Um script de configuração é composto por estas partes:

  • O bloco Configuration. É o bloco de script externo. Para defini-lo, use a palavra-chave Configuration e forneça um nome. Nesse caso, o nome da configuração é MyDscConfiguration.
  • Um ou mais blocos de . Definem os nós (computadores ou máquinas virtuais) que você está configurando. Na configuração acima, há um bloco node direcionado a um computador chamado TEST-PC1. O bloco pode aceitar vários nomes de computador.
  • Um ou mais blocos de recurso. É onde a configuração define as propriedades para os recursos que estão sendo configurados. Nesse caso, há dois blocos de recursos, cada um dos quais chama o recurso WindowsFeature .

Observação

O Recurso DSC do WindowsFeature só está disponível em computadores Windows Server. Para computadores com um sistema operacional cliente, como Windows 11, você precisa usar WindowsOptionalFeature. Para obter mais informações, consulte a seção "WindowsOptionalFeature" da documentação PSDscResources.

Dentro de um bloco de configuração, é possível fazer qualquer coisa que normalmente poderia ser feita em uma função do PowerShell. No exemplo anterior, se você não quiser codificar o nome do computador de destino na configuração, poderá adicionar um parâmetro para o nome do nó.

Neste exemplo, você especifica o nome do nó passando-o como o parâmetro ComputerName quando compila a configuração. O nome usa localhostcomo padrão .

Configuration MyDscConfiguration
{
    param
    (
        [string[]]$ComputerName='localhost'
    )

    Node $ComputerName
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

O bloco também pode aceitar vários nomes de computador. No exemplo acima, você pode usar o parâmetro -ComputerName ou passar uma lista de computadores separados por vírgula diretamente ao bloco .

MyDscConfiguration -ComputerName "localhost", "Server01"

Ao especificar uma lista de computadores para o bloco , de dentro de uma Configuração, você precisa usar a notação de matriz.

Configuration MyDscConfiguration
{
    Node @('localhost', 'Server01')
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

Compilando a configuração

Para poder aplicar uma configuração, você precisa compilá-la em um documento MOF. Faça isso chamando a configuração como você chamaria uma função do PowerShell. A última linha do exemplo contendo somente o nome da configuração, chama a configuração.

Observação

Para chamar uma configuração, a função precisa estar no escopo global (como acontece com qualquer outra função do PowerShell). 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. 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.

Quando você chama a configuração, ela:

  • Resolve todas as variáveis
  • Uma pasta no diretório atual com o mesmo nome que a configuração.
  • Um arquivo chamado NodeName.mof no novo diretório, em que NodeName é o nome do nó de destino da configuração. Se houver mais de um nó, será criado um arquivo MOF para cada nó.

Observação

O arquivo MOF contém todas as informações de configuração para o nó de destino. Por isso, é importante mantê-lo seguro. Para obter mais informações, consulte Protegendo o arquivo MOF.

A compilação da primeira configuração acima resulta na seguinte estrutura de pastas:

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

Se a configuração utilizar um parâmetro, como no segundo exemplo, ele precisará ser fornecido no tempo de compilação. A aparência deveria ser esta:

. .\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

Uso de novos recursos na sua configuração

Se você executou os exemplos anteriores, talvez tenha notado que foi informado que estava usando um recurso sem importá-lo explicitamente. Atualmente, a DSC vem com 12 recursos como parte do módulo PSDesiredStateConfiguration.

O cmdlet Get-DscResource pode ser usado para determinar quais recursos estão instalados no sistema e disponíveis para uso pelo 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.

Import-DscResource é uma palavra-chave dinâmica que pode ser reconhecida apenas dentro de um bloco Configuração, não se trata de um cmdlet. O Import-DscResource dá suporte a dois parâmetros:

  • ModuleName é a forma recomendada de usar o 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).
  • Name é o nome do recurso que será importado. 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).

Para saber mais sobre como usar Import-DSCResource, confira Usando Import-DSCResource

Diferenças entre o PowerShell v4 e v5

Há diferenças quanto ao local em que os recursos DSC precisam ser armazenados no PowerShell 4.0. Para saber mais, confira Local do recurso.

Consulte Também