DSC-konfigurationer
Gäller för: Windows PowerShell 4.0, Windows PowerShell 5.0
DSC-konfigurationer är PowerShell-skript som definierar en särskild typ av funktion. Du definierar en konfiguration med hjälp av PowerShell-nyckelordet Configuration.
Configuration MyDscConfiguration {
Node "TEST-PC1" {
WindowsFeature MyFeatureInstance {
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance {
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
Spara skriptet som en .ps1 fil.
Konfigurationssyntax
Ett konfigurationsskript består av följande delar:
- Konfigurationsblocket. Det här är det yttersta skriptblocket. Du definierar det med hjälp av nyckelordet Konfiguration och anger ett namn. I det här fallet är namnet på konfigurationen "MyDscConfiguration".
- Ett eller flera nodblock. Dessa definierar de noder (datorer eller virtuella datorer) som du konfigurerar. I konfigurationen ovan finns det ett Nodblock som riktar sig mot en dator med namnet "TEST-PC1". Node-blocket kan acceptera flera datornamn.
- Ett eller flera resursblock. Det är här som konfigurationen anger egenskaperna för de resurser som den konfigurerar. I det här fallet finns det två resursblock som vart och ett anropar resursen "WindowsFeature".
I ett konfigurationsblock kan du göra allt som du normalt kan göra i en PowerShell-funktion. Om du till exempel inte vill hårdkoda namnet på måldatorn i konfigurationen i föregående exempel kan du lägga till en parameter för nodnamnet:
I det här exemplet anger du namnet på noden genom att skicka den som parametern ComputerName när du kompilerar konfigurationen. Standardnamnet är "localhost".
Configuration MyDscConfiguration
{
param
(
[string[]]$ComputerName='localhost'
)
Node $ComputerName
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
Node-blocket kan också acceptera flera datornamn. I exemplet ovan kan du antingen använda parametern eller skicka en -ComputerName kommaavgränsad lista med datorer direkt till Node-blocket.
MyDscConfiguration -ComputerName "localhost", "Server01"
När du anger en lista över datorer till Node-blocket måste du använda matris notation från en konfiguration.
Configuration MyDscConfiguration
{
Node @('localhost', 'Server01')
{
WindowsFeature MyFeatureInstance
{
Ensure = 'Present'
Name = 'RSAT'
}
WindowsFeature My2ndFeatureInstance
{
Ensure = 'Present'
Name = 'Bitlocker'
}
}
}
MyDscConfiguration
Kompilera konfigurationen
Innan du kan använda en konfiguration måste du kompilera den till ett MOF-dokument. Du gör detta genom att anropa konfigurationen på samma sätt som du anropar en PowerShell-funktion. Den sista raden i exemplet som bara innehåller namnet på konfigurationen anropar konfigurationen.
Anteckning
Om du vill anropa en konfiguration måste funktionen finnas i globalt omfång (som med andra PowerShell-funktioner). Du kan göra detta antingen genom att "dot-sourcing" skriptet eller genom att köra konfigurationsskriptet med F5 eller genom att klicka på knappen Kör skript i ISE. Kör kommandot där är namnet på skriptfilen som innehåller din konfiguration för att punkt-källa . .\myConfig.ps1 myConfig.ps1 skriptet.
När du anropar konfigurationen gör den följande:
- Löser alla variabler
- Skapar en mapp i den aktuella katalogen med samma namn som konfigurationen.
- Skapar en fil med namnet NodeName.mof i den nya katalogen, där NodeName är namnet på målnoden för konfigurationen. Om det finns fler än en nod skapas en MOF-fil för varje nod.
Anteckning
MOF-filen innehåller all konfigurationsinformation för målnoden. Därför är det viktigt att hålla det säkert. Mer information finns i Skydda MOF-filen.
När du kompilerar den första konfigurationen ovan resulterar det i följande mappstruktur:
. .\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
Om konfigurationen tar en parameter, som i det andra exemplet, måste den anges vid kompileringen. Så här skulle det se ut:
. .\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
Använda nya resurser i din konfiguration
Om du körde föregående exempel kanske du har märkt att du har fått en varning om att du använder en resurs utan att uttryckligen importera den. I dag levereras DSC med 12 resurser som en del av PSDesiredStateConfiguration-modulen.
Cmdleten Get-DscResourcekan användas för att avgöra vilka resurser som är installerade på systemet och tillgängliga för användning av LCM.
När dessa moduler har placerats i och identifieras korrekt av $env:PSModulePath Get-DscResourcemåste de fortfarande läsas in i konfigurationen.
Import-DscResource är ett dynamiskt nyckelord som bara kan identifieras i ett konfigurationsblock, det är inte en cmdlet. Import-DscResource stöder två parametrar:
- ModuleName är det rekommenderade sättet att använda
Import-DscResource. Den godkänner namnet på modulen som innehåller de resurser som ska importeras (samt en strängmatris med modulnamn). - Namnet är namnet på resursen som ska importeras. Det här är inte det egna namnet som returneras som "Name" av Get-DscResource, utan klassnamnet som används när du definierar resursschemat (returneras som ResourceType av Get-DscResource).
Mer information om hur du Import-DSCResource använder finns i Använda Import-DSCResource
Skillnader mellan PowerShell v4 och v5
Det finns skillnader i var DSC-resurser måste lagras i PowerShell 4.0. Mer information finns i Resursplats.