Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0
In situaties in de echte wereld kunnen configuraties lang en complex worden, waarbij veel verschillende bronnen worden aangeroepen en een groot aantal eigenschappen wordt ingesteld. Om deze complexiteit aan te pakken, kunt u een Windows PowerShell Desired State Configuration (DSC)-configuratie gebruiken als bron voor andere configuraties. Dit wordt een samengestelde resource genoemd. Een samengestelde resource is een DSC-configuratie waaraan parameters moeten worden gekoppeld. De parameters van de configuratie fungeren als de eigenschappen van de resource.
De configuratie wordt opgeslagen als een bestand met een .schema.psm1 extensie. Het neemt de plaats in van zowel het MOF-schema als het resourcescript in een typische DSC-bron. Zie Windows PowerShell Desired State Configuration Resources voor meer informatie over DSC-resources.
De samengestelde resource maken
In ons voorbeeld maken we een configuratie die een aantal bestaande resources aanroept om virtuele machines te configureren. In plaats van de waarden op te geven die in configuratieblokken moeten worden ingesteld, neemt de configuratie parameters op die vervolgens in de configuratieblokken worden gebruikt.
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")
}
}
}
Opmerking
DSC biedt momenteel geen ondersteuning voor het plaatsen van samengestelde resources of geneste configuraties in een samengestelde resource.
De configuratie opslaan als een samengestelde resource
Als u de geparametriseerde configuratie wilt gebruiken als een DSC-bron, slaat u deze op in een mappenstructuur zoals die van elke andere MOF-gebaseerde bron en geeft u deze een .schema.psm1 naam. In dit voorbeeld geven we het bestand xVirtualMachine.schema.psm1de naam . U moet ook een manifest maken met de naam xVirtualMachine.psd1 dat de volgende regel bevat.
RootModule = 'xVirtualMachine.schema.psm1'
Opmerking
Dit is een aanvulling op MyDscResources.psd1het modulemanifest voor alle bronnen onder de MyDscResources map.
Als u klaar bent, moet de mappenstructuur er als volgt uitzien.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
De resource kan nu worden gedetecteerd met behulp van de Get-DscResource cmdlet en de eigenschappen ervan kunnen worden gedetecteerd met die cmdlet of met behulp van Ctrl+Space autocomplete in de Windows PowerShell ISE.
De samengestelde resource gebruiken
Vervolgens maken we een configuratie die de samengestelde resource aanroept. Met deze configuratie wordt de xVirtualMachine-composietbron aangeroepen om een virtuele machine te maken en wordt vervolgens de xComputer-bron aangeroepen om de naam ervan te wijzigen.
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"
}
}
}
U kunt deze resource ook gebruiken om meerdere VM's te maken door een matrix met VM-namen door te geven aan de xVirtualMachine-resource.
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"
}
}
}
Ondersteuning van PsDscRunAsCredential
Opmerking
PsDscRunAsCredential wordt ondersteund in PowerShell 5.0 en hoger.
De eigenschap PsDscRunAsCredential kan worden gebruikt in het resourceblok DSC-configuraties om op te geven dat de resource moet worden uitgevoerd onder een opgegeven set referenties. Zie DSC uitvoeren met gebruikersreferenties voor meer informatie.
Als u toegang wilt krijgen tot de gebruikerscontext vanuit een aangepaste resource, kunt u de automatische variabele $PsDscContextgebruiken.
Met de volgende code wordt bijvoorbeeld de gebruikerscontext waaronder de bron wordt uitgevoerd, naar de uitgebreide uitvoerstroom geschreven:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}