Samengestelde bronnen: met een DSC-configuratie als een bronComposite resources: Using a DSC configuration as a resource

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

In de praktijk situaties worden configuraties lange en complexe, aanroepen van veel verschillende bronnen en het instellen van een groot aantal eigenschappen.In real-world situations, configurations can become long and complex, calling many different resources and setting a vast number of properties. Om te helpen met het adres van deze complexiteit, kunt u de configuratie van een Windows PowerShell Desired State Configuration (DSC) als een resource voor andere configuraties.To help address this complexity, you can use a Windows PowerShell Desired State Configuration (DSC) configuration as a resource for other configurations. We noemen dit een samengestelde bron.We call this a composite resource. Een samengestelde bron is een DSC-configuratie die parameters zijn vereist.A composite resource is a DSC configuration that takes parameters. De parameters van de configuratie fungeren als de eigenschappen van de resource.The parameters of the configuration act as the properties of the resource. De configuratie wordt opgeslagen als een bestand met een . schema.psm1 extensie en wordt de plaats van zowel het MOF-schema en de resource een script in een typische DSC-resource (Zie voor meer informatie over DSC-resources Windows PowerShell Desired State Configuration Resources.The configuration is saved as a file with a .schema.psm1 extension, and takes the place of both the MOF schema and the resource script in a typical DSC resource (for more information about DSC resources, see Windows PowerShell Desired State Configuration Resources.

Maken van de samengestelde resourceCreating the composite resource

In ons voorbeeld maken we een configuratie met een aantal bestaande resources voor het configureren van virtuele machines wordt aangeroepen.In our example, we create a configuration that invokes a number of existing resources to configure virtual machines. In plaats van de waarden worden ingesteld in configuratie blokken opgeeft, wordt de configuratie een aantal parameters die worden gebruikt in de configuratie-blokken.Instead of specifying the values to be set in configuration blocks, the configuration takes a number of parameters that are then used in the configuration blocks.

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

De configuratie op te slaan als een samengestelde bronSaving the configuration as a composite resource

Opslaan in een mapstructuur net als elke andere MOF op basis van een bron voor het gebruik van de configuratie van de parameters als een DSC-resource, en de naam met een . schema.psm1 extensie.To use the parameterized configuration as a DSC resource, save it in a directory structure like that of any other MOF-based resource, and name it with a .schema.psm1 extension. In dit voorbeeld Noem we het bestand xVirtualMachine.schema.psm1.For this example, we’ll name the file xVirtualMachine.schema.psm1. U moet ook een manifest met de naam maken xVirtualMachine.psd1 die de volgende regel bevat.You also need to create a manifest named xVirtualMachine.psd1 that contains the following line. Dit is in aanvulling op MyDscResources.psd1, de module-manifest voor alle resources onder de MyDscResources map.Note that this is in addition to MyDscResources.psd1, the module manifest for all resources under the MyDscResources folder.

RootModule = 'xVirtualMachine.schema.psm1'

Wanneer u klaar bent, moeten de mapstructuur als volgt.When you are done, the folder structure should be as follows.

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

De resource kan nu worden gedetecteerd met de cmdlet Get-DscResource en bijbehorende eigenschappen kunnen worden gevonden door beide die cmdlet of via Ctrl + spatiebalk automatisch aanvullen in de Windows PowerShell ISE.The resource is now discoverable by using the Get-DscResource cmdlet, and its properties are discoverable by either that cmdlet or by using Ctrl+Space auto-complete in the Windows PowerShell ISE.

Met behulp van de samengestelde bronUsing the composite resource

Vervolgens maken we een configuratie die de samengestelde bron aanroept.Next we create a configuration that calls the composite resource. Deze configuratie roept de xVirtualMachine samengestelde bron voor het maken van een virtuele machine en roept vervolgens de xComputer resource te wijzigen.This configuration calls the xVirtualMachine composite resource to create a virtual machine, and then calls the xComputer resource to rename it.


configuration RenameVM
{

    Import-DscResource -Module TestCompositeResource
    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"
        }
    }
}

Ondersteunende PsDscRunAsCredentialSupporting PsDscRunAsCredential

Opmerking: PsDscRunAsCredential wordt ondersteund in PowerShell 5.0 en hoger.Note: PsDscRunAsCredential is supported in PowerShell 5.0 and later.

De PsDscRunAsCredential eigenschap kan worden gebruikt DSC-configuraties resource blok om op te geven dat de resource moet worden uitgevoerd onder een opgegeven set referenties.The PsDscRunAsCredential property can be used in DSC configurations resource block to specify that the resource should be run under a specified set of credentials. Zie voor meer informatie DSC uitgevoerd met gebruikersreferenties.For more information, see Running DSC with user credentials.

Voor toegang tot de gebruikerscontext van binnen een aangepaste bron, kunt u de automatische variabele $PsDscContext.To access the user context from within a custom resource, you can use the automatic variable $PsDscContext.

De volgende code zou bijvoorbeeld de gebruikerscontext waaronder de bron wordt uitgevoerd naar de uitgebreide uitvoerstroom schrijven:For example the following code would write the user context under which the resource is running to the verbose output stream:

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

Zie ookSee Also

ConceptenConcepts