Erstellen einer zusammengesetzten DSC-Ressource
In realen Situationen können DSC-Konfigurationen lang und komplex werden, indem mehrere verschiedene DSC-Ressourcen aufgerufen und Dutzende von Eigenschaften festgelegt werden. Um diese Komplexität zu beheben, können Sie eine DSC-Konfiguration als DSC-Ressource für andere DSC-Konfigurationen verwenden. Dies wird als zusammengesetzte DSC-Ressource bezeichnet. Eine zusammengesetzte DSC-Ressource ist eine DSC-Konfiguration, die Parameter akzeptiert. Die Parameter der DSC-Konfiguration fungieren als Eigenschaften der DSC-Ressource. Die DSC-Konfiguration wird als Datei mit einer .schema.psm1
Erweiterung gespeichert. Weitere Informationen zu DSC-Ressourcen finden Sie unter DSC-Ressourcen.
Wichtig
Zusammengesetzte DSC-Ressourcen funktionieren nicht mit Invoke-DscResource
. In DSC 2.0 und höher werden sie nur für die Verwendung mit dem Computerkonfigurationsfeature von Azure Automanage unterstützt.
Erstellen der zusammengesetzten Ressource
In unserem Beispiel erstellen wir eine Konfiguration, die mehrere vorhandene Ressourcen aufruft, um virtuelle Computer zu konfigurieren. Anstatt die festzulegenden Werte in Konfigurationsblöcken anzugeben, verwendet die Konfiguration Parameter, die anschließend in den Konfigurationsblöcken verwendet werden.
Configuration xVirtualMachine {
param(
# Name of VMs
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String[]] $VMName,
# Name of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchName,
# Type of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchType,
# Source Path for VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDParentPath,
# Destination path for diff VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDPath,
# Startup Memory for VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMStartupMemory,
# State of the VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMState
)
# Import the module that defines custom resources
Import-DSCResource -ModuleName xComputerManagement, xHyper-V
# Install the Hyper-V role
WindowsFeature HyperV {
Ensure = 'Present'
Name = 'Hyper-V'
}
# Create the virtual switch
xVMSwitch $SwitchName {
Ensure = 'Present'
Name = $SwitchName
Type = $SwitchType
DependsOn = '[WindowsFeature]HyperV'
}
# Check for Parent VHD file
File ParentVHDFile {
Ensure = 'Present'
DestinationPath = $VHDParentPath
Type = 'File'
DependsOn = '[WindowsFeature]HyperV'
}
# Check the destination VHD folder
File VHDFolder {
Ensure = 'Present'
DestinationPath = $VHDPath
Type = 'Directory'
DependsOn = '[File]ParentVHDFile'
}
# Create VM specific diff VHD
foreach ($Name in $VMName) {
xVHD "VHD$Name" {
Ensure = 'Present'
Name = $Name
Path = $VHDPath
ParentPath = $VHDParentPath
DependsOn = @(
'[WindowsFeature]HyperV'
'[File]VHDFolder'
)
}
}
# Create VM using the above VHD
foreach($Name in $VMName) {
xVMHyperV "VMachine$Name" {
Ensure = 'Present'
Name = $Name
VhdPath = (Join-Path -Path $VHDPath -ChildPath $Name)
SwitchName = $SwitchName
StartupMemory = $VMStartupMemory
State = $VMState
MACAddress = $MACAddress
WaitForIP = $true
DependsOn = @(
"[WindowsFeature]HyperV"
"[xVHD]VHD$Name"
)
}
}
}
Hinweis
DSC unterstützt nicht das Platzieren zusammengesetzter DSC-Ressourcenblöcke innerhalb einer zusammengesetzten DSC-Ressourcendefinition.
Speichern der DSC-Konfiguration als zusammengesetzte DSC-Ressource
Um die parametrisierte DSC-Konfiguration als DSC-Ressource zu verwenden, speichern Sie sie in einer Verzeichnisstruktur wie der einer MOF-basierten DSC-Ressource, und benennen Sie sie mit einer .schema.psm1
Erweiterung. In diesem Beispiel erhält die Datei die Bezeichnung xVirtualMachine.schema.psm1
. Sie müssen außerdem ein Manifest mit dem Namen xVirtualMachine.psd1
erstellen, das die folgende Zeile enthält.
RootModule = 'xVirtualMachine.schema.psm1'
Hinweis
Dies ist getrennt vom MyDscResources.psd1
Modulmanifest für alle DSC-Ressourcen unter dem MyDscResources
Ordner.
Wenn Sie fertig sind, sollte die Ordnerstruktur wie folgt aussehen:
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
Die DSC-Ressource kann jetzt mit dem Get-DscResource
Cmdlet ermittelt werden, und ihre Eigenschaften können entweder mit diesem Cmdlet oder mit strg+space autovervollständigen in VS Code ermittelt werden.
Verwenden der zusammengesetzten Ressource
Als Nächstes erstellen wir eine DSC-Konfiguration, die die zusammengesetzte DSC-Ressource aufruft. Diese DSC-Konfiguration ruft die xVirtualMachine
zusammengesetzte DSC-Ressource auf, um einen virtuellen Computer zu erstellen.
Configuration CreateVM {
Import-DSCResource -ModuleName xVirtualMachine
xVirtualMachine VM {
VMName = "Test"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
Sie können diese zusammengesetzte DSC-Ressource auch verwenden, um mehrere VMs zu erstellen, indem Sie ein Array von VM-Namen für die VMName-Eigenschaft der zusammengesetzten DSC-Ressource übergeben.
Configuration MultipleVms {
Import-DSCResource -ModuleName xVirtualMachine
xVirtualMachine VMs {
VMName = @(
"IIS01"
"SQL01"
"SQL02"
)
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für