Samengestelde resources: Een DSC-configuratie als resource gebruiken

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0

In praktijksituaties kunnen configuraties lang en complex worden, waarbij veel verschillende resources worden aangeroepen en een groot aantal eigenschappen worden ingesteld. Om deze complexiteit aan te pakken, kunt u een dsc-configuratie (Windows PowerShell Desired State Configuration) gebruiken als resource voor andere configuraties. Dit wordt een samengestelde resource genoemd. Een samengestelde resource is een DSC-configuratie die parameters gebruikt. 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-resource. 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 moeten worden ingesteld in configuratieblokken, neemt de configuratie parameters op die vervolgens worden gebruikt in de configuratieblokken.

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")
        }
    }
}

Notitie

DSC biedt momenteel geen ondersteuning voor het plaatsen van samengestelde resources of geneste configuraties binnen een samengestelde resource.

De configuratie opslaan als een samengestelde resource

Als u de geparameteriseerde configuratie wilt gebruiken als een DSC-resource, slaat u deze op in een mapstructuur zoals die van een andere MOF-resource en geeft u deze een .schema.psm1 extensie. In dit voorbeeld noemen we het bestand xVirtualMachine.schema.psm1. U moet ook een manifest maken met de naam xVirtualMachine.psd1 dat de volgende regel bevat.

RootModule = 'xVirtualMachine.schema.psm1'

Notitie

Dit is in aanvulling op MyDscResources.psd1, het modulemanifest voor alle resources in de MyDscResources map.

Wanneer u klaar bent, moet de mapstructuur er als volgt uitzien.

$env: psmodulepath
    |- MyDscResources
        |- MyDscResources.psd1
        |- DSCResources
            |- xVirtualMachine
                |- xVirtualMachine.psd1
                |- xVirtualMachine.schema.psm1

De resource is nu detecteerbaar met behulp van de cmdlet en de Get-DscResource eigenschappen kunnen worden gedetecteerd door die cmdlet of met ctrl-ruimte+ automatisch aanvullen in de Windows PowerShell ISE.

De samengestelde resource gebruiken

Vervolgens maken we een configuratie die de samengestelde resource aanroept. Met deze configuratie wordt de samengestelde resource xVirtualMachine aangeroepen om een virtuele machine te maken. Vervolgens wordt de resource xComputer 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 resource xVirtualMachine.

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 voor PsDscRunAsCredential

Notitie

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.

De volgende code schrijft bijvoorbeeld de gebruikerscontext waaronder de resource wordt uitgevoerd naar de uitgebreide uitvoerstroom:

if ($PsDscContext.RunAsUser) {
    Write-Verbose "User: $PsDscContext.RunAsUser";
}

Zie ook

Concepten