Configurações do DSC

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

As configurações do DSC são scripts do PowerShell que definem um tipo especial de função. Para definir uma configuração, utilize a Configuração da palavra-chave do PowerShell.

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

Guarde o script como um .ps1 ficheiro.

Sintaxe de configuração

Um script de configuração consiste nas seguintes partes:

  • O bloco Configuração . Este é o bloco de scripts mais externo. Pode defini-la utilizando a palavra-chave Configuração e fornecendo um nome. Neste caso, o nome da configuração é MyDscConfiguration.
  • Um ou mais blocos de Nó . Estes definem os nós (computadores ou VMs) que está a configurar. Na configuração acima, existe um bloco Node que visa um computador com o nome TEST-PC1. O bloco pode aceitar vários nomes de computador.
  • Um ou mais blocos de recursos. É aqui que a configuração define as propriedades dos recursos que está a configurar. Neste caso, existem dois blocos de recursos, cada um dos quais chama o recurso WindowsFeature .

Nota

O Recurso do WindowsFeature DSC só está disponível em computadores Windows Server. Para computadores com um SO cliente, como Windows 11, tem de utilizar o WindowsOptionalFeature. Para obter mais informações, veja a secção "WindowsOptionalFeature" da documentação PSDscResources.

Num bloco de Configuração , pode fazer tudo o que normalmente puder numa função do PowerShell. No exemplo anterior, se não quisesse codificar o nome do computador de destino na configuração, poderia adicionar um parâmetro para o nome do nó.

Neste exemplo, vai especificar o nome do nó ao transmiti-lo como o parâmetro ComputerName quando compila a configuração. O nome é predefinido para localhost.

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

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

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

MyDscConfiguration

O bloco Node também pode aceitar vários nomes de computador. No exemplo acima, pode utilizar o -ComputerName parâmetro ou transmitir uma lista separada por vírgulas de computadores diretamente para o bloco .

MyDscConfiguration -ComputerName "localhost", "Server01"

Ao especificar uma lista de computadores para o bloco , a partir de uma Configuração, tem de utilizar a notação de matriz.

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

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

MyDscConfiguration

Compilar a configuração

Antes de poder decretar uma configuração, tem de compilá-la num documento MOF. Pode fazê-lo ao chamar a configuração como chamaria uma função do PowerShell. A última linha do exemplo que contém apenas o nome da configuração chama a configuração.

Nota

Para chamar uma configuração, a função tem de estar no âmbito global (como em qualquer outra função do PowerShell). Pode fazer com que isto aconteça ao "dot-sourcing" do script ou ao executar o script de configuração utilizando F5 ou clicando no botão Executar Script no ISE. Para executar o script de origem de pontos, execute o comando . .\myConfig.ps1 em que myConfig.ps1 é o nome do ficheiro de script que contém a sua configuração.

Quando chama a configuração, esta:

  • Resolve todas as variáveis
  • Cria uma pasta no diretório atual com o mesmo nome que a configuração.
  • Cria um ficheiro com o nome NodeName.mof no novo diretório, onde NodeName é o nome do nó de destino da configuração. Se existir mais do que um nó, será criado um ficheiro MOF para cada nó.

Nota

O ficheiro MOF contém todas as informações de configuração do nó de destino. Por este motivo, é importante mantê-lo seguro. Para obter mais informações, veja Proteger o ficheiro MOF.

Compilar a 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, este tem de ser fornecido no momento da compilação. Eis o aspeto da seguinte forma:

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

Utilizar novos recursos na configuração

Se tiver executado os exemplos anteriores, poderá ter reparado que foi avisado de que estava a utilizar um recurso sem o importar explicitamente. Atualmente, o DSC é fornecido com 12 recursos como parte do módulo PSDesiredStateConfiguration.

O cmdlet Get-DscResource pode ser utilizado para determinar que recursos estão instalados no sistema e disponíveis para utilização pelo LCM. Assim que estes módulos tiverem sido colocados $env:PSModulePath e forem devidamente reconhecidos pela Get-DscResource, ainda precisam de ser carregados na sua configuração.

Import-DscResource é uma palavra-chave dinâmica que só pode ser reconhecida num bloco de Configuração , não é um cmdlet. Import-DscResource suporta dois parâmetros:

  • ModuleName é a forma recomendada de utilizar Import-DscResource. Aceita o nome do módulo que contém os recursos a importar (bem como uma matriz de cadeia de nomes de módulos).
  • Nome é o nome do recurso a importar. Este não é o nome amigável devolvido como "Nome" por Get-DscResource, mas o nome da classe utilizado ao definir o esquema de recurso (devolvido como ResourceType por Get-DscResource).

Para obter mais informações sobre como utilizar Import-DSCResourceo , consulte Utilizar Import-DSCResource

Diferenças do PowerShell v4 e v5

Existem diferenças em que os recursos do DSC têm de ser armazenados no PowerShell 4.0. Para obter mais informações, veja Localização do recurso.

Consulte também