DSC-configuratiesDSC Configurations

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

DSC-configuraties zijn PowerShell-scripts die een speciaal type van de functie definiëren.DSC configurations are PowerShell scripts that define a special type of function. Als u een configuratie definieert, u het sleutelwoord PowerShell configuratie.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

Sla het script als een ps1-bestand.Save the script as a .ps1 file.

De syntaxis van de configuratieConfiguration syntax

Een configuratiescript bestaat uit de volgende onderdelen:A configuration script consists of the following parts:

  • De configuratie blok.The Configuration block. Dit is het buitenste scriptblok.This is the outermost script block. U de gegevens definiëren met behulp van de configuratie sleutelwoord en een naam geven.You define it by using the Configuration keyword and providing a name. In dit geval is de naam van de configuratie 'MyDscConfiguration'.In this case, the name of the configuration is "MyDscConfiguration".
  • Een of meer knooppunt blokken.One or more Node blocks. Dit definieert de knooppunten (computers of virtuele machines) die u configureert.These define the nodes (computers or VMs) that you are configuring. In de bovenstaande configuratie, er is een knooppunt blok die gericht is op een computer met de naam 'TEST-PC1'.In the above configuration, there is one Node block that targets a computer named "TEST-PC1".
  • Een of meer resource-blokken.One or more resource blocks. Dit is waar de configuratie stelt u de eigenschappen voor de resources die deze configureert.This is where the configuration sets the properties for the resources that it is configuring. In dit geval zijn er twee resource blokken, die elk de resource 'WindowsFeature' aanroepen.In this case, there are two resource blocks, each of which call the "WindowsFeature" resource.

Binnen een configuratie blok, kunt u alles wat u normaal gesproken in een PowerShell-functie kan doen.Within a Configuration block, you can do anything that you normally could in a PowerShell function. Bijvoorbeeld in het vorige voorbeeld kan als u niet wilt harde code de naam van de doelcomputer in de configuratie u een parameter toevoegen voor de knooppuntnaam van: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 -ComputerName <MyComputer>

In dit voorbeeld wordt u de naam van het knooppunt door door te geven als de ComputerName parameter door bij het compileren van de configuratie.In this example, you specify the name of the node by passing it as the ComputerName parameter when you compile the configuration. De naam van de standaard 'localhost'.The name defaults to "localhost".

De configuratie compilerenCompiling the configuration

Voordat u een configuratie op te nemen kunt, die u moet deze worden gecompileerd tot een MOF-document.Before you can enact a configuration, you have to compile it into a MOF document. U doen dit door het aanroepen van de configuratie, net als een PowerShell-functie.You do this by calling the configuration like you would a PowerShell function.
De laatste regel van het voorbeeld met alleen de naam van de configuratie, roept de configuratie.The last line of the example containing only the name of the configuration, calls the configuration.

Opmerking: voor het aanroepen van een configuratie met de functie moet in het globale bereik (net als bij een andere PowerShell-functie).Note: To call a configuration, the function must be in global scope (as with any other PowerShell function). U kunt aanbrengen in dit geval ofwel door 'dotsourcing' het script of configuratiescript uit te voeren de met behulp van F5 of klik op de -Script uitvoeren knop in de 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. Het script voor punt-bron, voert u de opdracht . .\myConfig.ps1 waar myConfig.ps1 is de naam van het scriptbestand dat uw configuratie bevat.To dot-source the script, run the command . .\myConfig.ps1 where myConfig.ps1 is the name of the script file that contains your configuration.

Bij het aanroepen van de configuratie het:When you call the configuration, it:

  • Alle variabelen wordt opgelostResolves all variables
  • Maakt een map in de huidige map met dezelfde naam als de configuratie.Creates a folder in the current directory with the same name as the configuration.
  • Maakt een bestand met de naam NodeName_MOF in de nieuwe map waar _NodeName is de naam van het doelknooppunt van de configuratie.Creates a file named NodeName.mof in the new directory, where NodeName is the name of the target node of the configuration. Als er meer dan één knooppunten, wordt een MOF-bestand gemaakt voor elk knooppunt.If there are more than one nodes, a MOF file will be created for each node.

Opmerking: het MOF-bestand bevat alle van de configuratiegegevens voor het doelknooppunt.Note: The MOF file contains all of the configuration information for the target node. Als gevolg hiervan is het belangrijk beveiligd blijft.Because of this, it’s important to keep it secure. Zie voor meer informatie beveiligen van het MOF-bestand.For more information, see Securing the MOF file.

Compileren van de eerste configuratie boven resultaten in de volgende mapstructuur: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 localhost.mof

Als de configuratie een parameter, zoals in het tweede voorbeeld moet heeft die worden opgegeven tijdens de compilatie.If the configuration takes a parameter, as in the second example, that has to be provided at compile time. Ga als volgt die zou als volgt uitzien: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

Met behulp van DependsOnUsing DependsOn

Is een nuttig DSC-sleutelwoord DependsOn.A useful DSC keyword is DependsOn. Normaal (maar niet noodzakelijkerwijs altijd), DSC van de resources in de volgorde waarin ze worden weergegeven in de configuratie van de toepassing.Typically (though not necessarily always), DSC applies the resources in the order that they appear within the configuration. Echter, DependsOn geeft aan welk resources afhankelijk zijn van andere bronnen en de LCM zorgt ervoor dat ze worden toegepast in de juiste volgorde, ongeacht de volgorde in welke resource exemplaren worden gedefinieerd.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. Bijvoorbeeld: een configuratie opgeven die een exemplaar van de gebruiker bron is afhankelijk van de aanwezigheid van een groep exemplaar: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"
        }
    }
}

Met behulp van nieuwe resources in uw configuratieUsing new resources in Your configuration

Als u de eerdere voorbeelden hebt uitgevoerd, u mogelijk opgevallen dat zijn u gewaarschuwd dat u een resource zijn gebruiken zonder expliciet importeren.If you ran the previous examples, you might have noticed that you were warned that you were using a resource without explicitly importing it. Vandaag de dag DSC wordt geleverd met 12 resources als onderdeel van de module PSDesiredStateConfiguration.Today, DSC ships with 12 resources as part of the PSDesiredStateConfiguration module. Andere bronnen in externe modules moeten worden geplaatst in $env:PSModulePath om te kunnen worden herkend door de LCM.Other resources in external modules must be placed in $env:PSModulePath in order to be recognized by the LCM. Een nieuwe cmdlet Get-DscResource, kunnen worden gebruikt om te bepalen welke bronnen worden geïnstalleerd op het systeem en zijn beschikbaar voor gebruik door de 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. Zodra deze modules zijn geplaatst $env:PSModulePath en correct worden herkend door Get-DscResource, ze nog moeten worden geladen in uw configuratie.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. Importeren DscResource is een dynamische sleutelwoord dat alleen kan worden herkend binnen een configuratie blok (dat wil zeggen het is niet een cmdlet).Import-DscResource is a dynamic keyword that can only be recognized within a Configuration block (i.e. it is not a cmdlet). Importeren DscResource ondersteunt twee parameters:Import-DscResource supports two parameters:

  • Modulenaam is de aanbevolen manier van het gebruik van importeren DscResource.ModuleName is the recommended way of using Import-DscResource. De naam van de module met de resources die worden geïmporteerd (evenals een string-matrix van modulenamen) worden geaccepteerd.It accepts the name of the module that contains the resources to be imported (as well as a string array of module names).
  • Naam is de naam van de resource te importeren.Name is the name of the resource to import. Dit is niet de beschrijvende naam die wordt geretourneerd als 'Name' door Get-DscResource, maar de naam van de klasse die wordt gebruikt wanneer definiëren van de resource-schema (geretourneerd als ResourceType door 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).

Zie ookSee Also