Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: Windows PowerShell 4.0, Windows PowerShell 5.0
In der Praxis können Konfigurationen lang und komplex werden, viele verschiedene Ressourcen aufrufen und eine große Anzahl von Eigenschaften festlegen. Um dieser Komplexität gerecht zu werden, können Sie eine Windows PowerShell-DSC-Konfiguration (Desired State Configuration) als Ressource für andere Konfigurationen verwenden. Dies wird als zusammengesetzte Ressource bezeichnet. Eine Verbundressource ist eine DSC-Konfiguration, die Parameter akzeptiert. Die Parameter der Konfiguration fungieren als Eigenschaften der Ressource.
Die Konfiguration wird als Datei mit der .schema.psm1 Erweiterung gespeichert. Es ersetzt sowohl das MOF-Schema als auch das Ressourcenskript in einer typischen DSC-Ressource. Weitere Informationen zu DSC-Ressourcen finden Sie unter Windows PowerShell Desired State Configuration Resources.
Erstellen der zusammengesetzten Ressource
In unserem Beispiel erstellen wir eine Konfiguration, die eine Reihe vorhandener Ressourcen aufruft, um virtuelle Maschinen zu konfigurieren. Anstatt die Werte anzugeben, die in Konfigurationsblöcken gesetzt werden sollen, nimmt die Konfiguration Parameter auf, die dann 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 derzeit nicht das Platzieren von Verbundressourcen oder geschachtelten Konfigurationen innerhalb einer Verbundressource.
Speichern der Konfiguration als zusammengesetzte Ressource
Wenn Sie die parametrisierte Konfiguration als DSC-Ressource verwenden möchten, speichern Sie sie in einer Verzeichnisstruktur wie jede andere MOF-basierte Ressource, und benennen Sie sie mit einer .schema.psm1 Erweiterung. In diesem Beispiel nennen wir die Datei xVirtualMachine.schema.psm1. Außerdem müssen Sie ein Manifest mit dem Namen xVirtualMachine.psd1 erstellen, das die folgende Zeile enthält.
RootModule = 'xVirtualMachine.schema.psm1'
Hinweis
Dies gilt zusätzlich zu MyDscResources.psd1, dem Modulmanifest für alle 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 Ressource kann jetzt mit dem Get-DscResource Cmdlet ermittelt werden, und ihre Eigenschaften können entweder mit diesem Cmdlet oder mithilfe der automatischen Vervollständigungder STRG-Leertaste+ in der Windows PowerShell ISE ermittelt werden.
Verwenden der zusammengesetzten Ressource
Als Nächstes erstellen wir eine Konfiguration, die die zusammengesetzte Ressource aufruft. Diese Konfiguration ruft die zusammengesetzte Ressource xVirtualMachine auf, um einen virtuellen Computer zu erstellen, und ruft dann die Ressource xComputer auf, um sie umzubenennen.
configuration RenameVM
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VM
{
VMName = "Test"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
Node "192.168.10.1"
{
xComputer Name
{
Name = "SQL01"
DomainName = "fourthcoffee.com"
}
}
}
Sie können diese Ressource auch verwenden, um mehrere VMs zu erstellen, indem Sie ein Array von VM-Namen an die xVirtualMachine-Ressource übergeben.
Configuration MultipleVms
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VMs
{
VMName = "IIS01", "SQL01", "SQL02"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
}
Unterstützen von PsDscRunAsCredential
Hinweis
PsDscRunAsCredential wird in PowerShell 5.0 und höher unterstützt.
Die PsDscRunAsCredential-Eigenschaft kann im Ressourcenblock DSC-Konfigurationen verwendet werden, um anzugeben, dass die Ressource unter einem angegebenen Satz von Anmeldeinformationen ausgeführt werden soll. Weitere Informationen finden Sie unter Ausführen von DSC mit Benutzeranmeldeinformationen.
Um aus einer benutzerdefinierten Ressource heraus auf den Benutzerkontext zuzugreifen, können Sie die automatische Variable $PsDscContextverwenden.
Der folgende Code würde z. B. den Benutzerkontext, unter dem die Ressource ausgeführt wird, in den ausführlichen Ausgabestream schreiben:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}