Összetett erőforrások: DSC-konfiguráció használata erőforráskéntComposite resources: Using a DSC configuration as a resource

A következőkre vonatkozik: Windows PowerShell 4,0, Windows PowerShell 5,0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

A valós helyzetekben a konfigurációk hosszú és összetettebbek lehetnek, és számos különböző erőforrás meghívásával és a tulajdonságok nagy számának beállításával.In real-world situations, configurations can become long and complex, calling many different resources and setting a vast number of properties. Ennek a bonyolultságnak a megoldásához a Windows PowerShell kívánt állapot-konfiguráció (DSC) konfigurációját használhatja erőforrásként más konfigurációkhoz.To help address this complexity, you can use a Windows PowerShell Desired State Configuration (DSC) configuration as a resource for other configurations. Ezt nevezzük összetett erőforrásnak.This is called a composite resource. Az összetett erőforrás egy DSC-konfiguráció, amely paramétereket fogad el.A composite resource is a DSC configuration that takes parameters. A konfigurációs paraméterek az erőforrás tulajdonságaiként működnek.The parameters of the configuration act as the properties of the resource. A konfiguráció kiterjesztéssel ellátott fájlként lesz mentve .schema.psm1 .The configuration is saved as a file with a .schema.psm1 extension. A rendszer a MOF sémát és az erőforrás-parancsfájlt is elhelyezi egy tipikus DSC-erőforrásban.It takes the place of both the MOF schema, and the resource script in a typical DSC resource. A DSC-erőforrásokkal kapcsolatos további információkért lásd: Windows PowerShell kívánt állapot konfigurációs erőforrásai.For more information about DSC resources, see Windows PowerShell Desired State Configuration Resources.

Összetett erőforrás létrehozásaCreating the composite resource

A példánkban egy olyan konfigurációt hozunk létre, amely számos meglévő erőforrást hív meg a virtuális gépek konfigurálásához.In our example, we create a configuration that invokes a number of existing resources to configure virtual machines. A konfigurációs blokkokban beállított értékek megadása helyett a konfiguráció a konfigurációs blokkokban használt paramétereket veszi figyelembe.Instead of specifying the values to be set in configuration blocks, the configuration takes in 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")
        }
    }
}

Megjegyzés

A DSC jelenleg nem támogatja összetett erőforrások vagy beágyazott konfigurációk elhelyezését egy összetett erőforráson belül.DSC doesn't currently support placing composite resources or nested configurations within a composite resource.

A konfiguráció mentése összetett erőforráskéntSaving the configuration as a composite resource

Ha a paraméteres konfigurációt DSC-erőforrásként szeretné használni, mentse egy olyan címtár-struktúrába, mint bármely más MOF-alapú erőforrás, és nevezze el egy .schema.psm1 kiterjesztéssel.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. Ebben a példában a fájl nevét fogjuk megkeresni xVirtualMachine.schema.psm1 .For this example, we'll name the file xVirtualMachine.schema.psm1. Létre kell hoznia egy nevű jegyzékfájlt is xVirtualMachine.psd1 , amely a következő sort tartalmazza.You also need to create a manifest named xVirtualMachine.psd1 that contains the following line.

RootModule = 'xVirtualMachine.schema.psm1'

Megjegyzés

Ez a MyDscResources.psd1 modulon kívül a mappában lévő összes erőforráshoz is tartozik MyDscResources .This is in addition to MyDscResources.psd1, the module manifest for all resources under the MyDscResources folder.

Ha elkészült, a mappa struktúrájának a következőnek kell lennie:When you are done, the folder structure should be as follows.

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

Az erőforrás mostantól a parancsmag használatával felderíthető Get-DscResource , és a tulajdonságai a parancsmag által vagy a Windows PowerShell integrált parancsprogram-kezelési környezet CTRL + Space autocomplete használatával is felderíthetők.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 autocomplete in the Windows PowerShell ISE.

Az összetett erőforrás használataUsing the composite resource

Ezután létrehozunk egy olyan konfigurációt, amely meghívja az összetett erőforrást.Next we create a configuration that calls the composite resource. Ez a konfiguráció meghívja a xVirtualMachine összetett erőforrást egy virtuális gép létrehozásához, majd meghívja a xComputer -erőforrást az átnevezéshez.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 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"
        }
    }
}

Ezen erőforrás használatával több virtuális gépet is létrehozhat, ha a virtuális gépek nevét egy tömbbe helyezi a xVirtualMachine-erőforrásba.You can also use this resource to create multiple VMs by passing in an array of VM names to the xVirtualMachine resource.

Configuration MultipleVms
{
    Import-DscResource -Module 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"
        }
    }
}

Támogató PsDscRunAsCredentialSupporting PsDscRunAsCredential

Megjegyzés

A PsDscRunAsCredential a PowerShell 5,0-es és újabb verzióiban támogatott.PsDscRunAsCredential is supported in PowerShell 5.0 and later.

A PsDscRunAsCredential tulajdonság a DSC-konfigurációk erőforrás-blokkban használható annak megadásához, hogy az erőforrást a hitelesítő adatok meghatározott készlete alatt kell futtatni.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. További információ: a DSC futtatása felhasználói hitelesítő adatokkal.For more information, see Running DSC with user credentials.

Ha egyéni erőforráson belül szeretné elérni a felhasználói környezetet, használhatja az automatikus változót $PsDscContext .To access the user context from within a custom resource, you can use the automatic variable $PsDscContext.

A következő kód például azt a felhasználói környezetet írja, amelyben az erőforrás fut a részletes kimeneti adatfolyamként: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";
}

Lásd még:See Also

AlapelvekConcepts