Sammansatta resurser: Använda en DSC-konfiguration som en resurs

Gäller för: Windows PowerShell 4.0, Windows PowerShell 5.0

I verkliga situationer kan konfigurationer bli långa och komplexa, anropa många olika resurser och ange ett stort antal egenskaper. För att lösa den här komplexiteten kan du använda en Windows PowerShell Desired State Configuration-konfiguration (DSC) som en resurs för andra konfigurationer. Detta kallas för en sammansatt resurs. En sammansatt resurs är en DSC-konfiguration som tar parametrar. Konfigurationsparametrarna fungerar som resursens egenskaper. Konfigurationen sparas som en fil med ett .schema.psm1 tillägg. Det ersätter både MOF-schemat och resursskriptet i en typisk DSC-resurs. Mer information om DSC-resurser finns i Windows PowerShell Desired State Configuration Resurser.

Skapa den sammansatta resursen

I vårt exempel skapar vi en konfiguration som anropar ett antal befintliga resurser för att konfigurera virtuella datorer. I stället för att ange de värden som ska anges i konfigurationsblocken tar konfigurationen in parametrar som sedan används i konfigurationsblocken.

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

Anteckning

DSC stöder för närvarande inte placering av sammansatta resurser eller kapslade konfigurationer i en sammansatt resurs.

Spara konfigurationen som en sammansatt resurs

Om du vill använda den parametriserade konfigurationen som en DSC-resurs sparar du den i en katalogstruktur som för andra MOF-baserade resurser och namnger den med ett .schema.psm1 tillägg. I det här exemplet ger vi filen xVirtualMachine.schema.psm1namnet . Du måste också skapa ett manifest med namnet xVirtualMachine.psd1 som innehåller följande rad.

RootModule = 'xVirtualMachine.schema.psm1'

Anteckning

Detta är utöver MyDscResources.psd1, modulmanifestet för alla resurser under MyDscResources mappen .

När du är klar ska mappstrukturen vara följande.

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

Resursen kan nu identifieras med hjälp av cmdleten Get-DscResource och dess egenskaper kan identifieras med antingen den cmdleten eller genom att använda Automatisk komplettering avCtrl-blanksteg+ i Windows PowerShell ISE.

Använda den sammansatta resursen

Därefter skapar vi en konfiguration som anropar den sammansatta resursen. Den här konfigurationen anropar den sammansatta resursen xVirtualMachine för att skapa en virtuell dator och anropar sedan xComputer-resursen för att byta namn på den.

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

Du kan också använda den här resursen för att skapa flera virtuella datorer genom att skicka in en matris med VM-namn till resursen 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"
        }
    }
}

Stöd för PsDscRunAsCredential

Anteckning

PsDscRunAsCredential stöds i PowerShell 5.0 och senare.

Egenskapen PsDscRunAsCredential kan användas i resursblocket för DSC-konfigurationer för att ange att resursen ska köras under en angiven uppsättning autentiseringsuppgifter. Mer information finns i Köra DSC med användarautentiseringsuppgifter.

Om du vill komma åt användarkontexten inifrån en anpassad resurs kan du använda den automatiska variabeln $PsDscContext.

Följande kod skulle till exempel skriva användarkontexten där resursen körs till den utförliga utdataströmmen:

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

Se även

Begrepp