DSC-configuraties
Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0
DSC-configuraties zijn PowerShell-scripts waarmee een speciaal type functie wordt gedefinieerd. Als u een configuratie wilt definiëren, gebruikt u het PowerShell-trefwoord Configuratie.
Configuration MyDscConfiguration {
Node "TEST-PC1" {
WindowsFeature MyFeatureInstance {
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance {
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
Sla het script op als een .ps1
bestand.
Configuratiesyntaxis
Een configuratiescript bestaat uit de volgende onderdelen:
- Het configuratieblok . Dit is het buitenste scriptblok. U definieert deze door het trefwoord Configuratie te gebruiken en een naam op te geven. In dit geval is
MyDscConfiguration
de naam van de configuratie . - Een of meer knooppuntblokken . Deze definiëren de knooppunten (computers of VM's) die u configureert.
In de bovenstaande configuratie is er één knooppuntblok dat is gericht op een computer met de naam
TEST-PC1
. Het knooppuntblok kan meerdere computernamen accepteren. - Een of meer resourceblokken. Hier stelt de configuratie de eigenschappen in voor de resources die worden geconfigureerd. In dit geval zijn er twee resourceblokken, die elk de resource WindowsFeature aanroepen.
Notitie
De WindowsFeature DSC-resource is alleen beschikbaar op Windows Server-computers. Voor computers met een client-besturingssysteem, zoals Windows 11, moet u in plaats daarvan WindowsOptionalFeature gebruiken. Zie de sectie 'WindowsOptionalFeature' van de psdscResources-documentatie voor meer informatie.
Binnen een configuratieblok kunt u alles doen wat u normaal gesproken zou kunnen doen in een PowerShell-functie. Als u in het vorige voorbeeld de naam van de doelcomputer in de configuratie niet hard wilt coden, kunt u een parameter toevoegen voor de naam van het knooppunt.
In dit voorbeeld geeft u de naam van het knooppunt op door het door te geven als de parameter ComputerName wanneer u de configuratie compileert. De naam wordt standaard ingesteld op localhost
.
Configuration MyDscConfiguration
{
param
(
[string[]]$ComputerName='localhost'
)
Node $ComputerName
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
Het knooppuntblok kan ook meerdere computernamen accepteren. In het bovenstaande voorbeeld kunt u de -ComputerName
parameter gebruiken of een door komma's gescheiden lijst met computers rechtstreeks doorgeven aan het knooppuntblok .
MyDscConfiguration -ComputerName "localhost", "Server01"
Wanneer u een lijst met computers opgeeft voor het knooppuntblok , moet u vanuit een configuratie matrixnotatie gebruiken.
Configuration MyDscConfiguration
{
Node @('localhost', 'Server01')
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
De configuratie compileren
Voordat u een configuratie kunt uitvoeren, moet u deze compileren in een MOF-document. U doet dit door de configuratie aan te roepen zoals u een PowerShell-functie aanroept. De laatste regel van het voorbeeld die alleen de naam van de configuratie bevat, roept de configuratie aan.
Notitie
Als u een configuratie wilt aanroepen, moet de functie zich binnen het globale bereik bevinden (net als bij elke andere PowerShell-functie). U kunt dit doen door het script dot-sourcing uit te voeren of door het configuratiescript uit te voeren met behulp van F5 of door te klikken op de knop Script uitvoeren in de ISE. Als u het script als bronbron wilt gebruiken, voert u de opdracht . .\myConfig.ps1
uit, waarbij myConfig.ps1
de naam is van het scriptbestand dat uw configuratie bevat.
Wanneer u de configuratie aanroept, gaat het volgende:
- Hiermee worden alle variabelen opgelost
- Hiermee maakt u een map in de huidige map met dezelfde naam als de configuratie.
- Hiermee maakt u een bestand met de naam NodeName.mof in de nieuwe map, waarbij NodeName de naam is van het doelknooppunt van de configuratie. Als er meer dan één knooppunt is, wordt voor elk knooppunt een MOF-bestand gemaakt.
Notitie
Het MOF-bestand bevat alle configuratiegegevens voor het doelknooppunt. Daarom is het belangrijk om het veilig te houden. Zie Het MOF-bestand beveiligen voor meer informatie.
Het compileren van de eerste configuratie hierboven resulteert in de volgende mapstructuur:
. .\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 gebruikt, zoals in het tweede voorbeeld, moet deze worden opgegeven tijdens het compileren. Dit ziet er als volgt uit:
. .\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
Nieuwe resources gebruiken in uw configuratie
Als u de vorige voorbeelden hebt uitgevoerd, hebt u misschien gemerkt dat u een waarschuwing hebt ontvangen dat u een resource gebruikt zonder deze expliciet te importeren. Tegenwoordig wordt DSC geleverd met 12 resources als onderdeel van de PSDesiredStateConfiguration-module.
De cmdlet Get-DscResource kan worden gebruikt om te bepalen welke resources op het systeem zijn geïnstalleerd en beschikbaar zijn voor gebruik door de LCM.
Zodra deze modules zijn geplaatst in $env:PSModulePath
en correct worden herkend door Get-DscResource, moeten ze nog steeds in uw configuratie worden geladen.
Import-DscResource is een dynamisch trefwoord dat alleen kan worden herkend in een configuratieblok . Het is geen cmdlet. Import-DscResource ondersteunt twee parameters:
- ModuleName is de aanbevolen manier om Import-DscResource te gebruiken. Het accepteert de naam van de module die de resources bevat die moeten worden geïmporteerd (evenals een tekenreeksmatrix met modulenamen).
- Naam is de naam van de resource die moet worden geïmporteerd. Dit is niet de beschrijvende naam die wordt geretourneerd als 'Naam' door Get-DscResource, maar de klassenaam die wordt gebruikt bij het definiëren van het resourceschema (geretourneerd als ResourceType door Get-DscResource).
Zie Import-DSCResource gebruiken voor meer informatie over het gebruik Import-DSCResource
Verschillen in PowerShell v4 en v5
Er zijn verschillen in waar DSC-resources moeten worden opgeslagen in PowerShell 4.0. Zie Resourcelocatie voor meer informatie.