Partilhar via


Recursos compostos: utilizar uma configuração do DSC como recurso

Aplica-se a: Windows PowerShell 4.0, Windows PowerShell 5.0

Em situações reais, as configurações podem tornar-se longas e complexas, chamando muitos recursos diferentes e definindo um vasto número de propriedades. Para ajudar a resolver esta complexidade, pode utilizar uma configuração de Windows PowerShell Desired State Configuration (DSC) como um recurso para outras configurações. Isto chama-se recurso composto. Um recurso composto é uma configuração do DSC que utiliza parâmetros. Os parâmetros da configuração funcionam como as propriedades do recurso. A configuração é guardada como um ficheiro com uma .schema.psm1 extensão. Assume o lugar do esquema MOF e do script de recursos num recurso DSC típico. Para obter mais informações sobre os recursos do DSC, veja Windows PowerShell Desired State Configuration Resources (Recursos do Windows PowerShell Desired State Configuration).

Criar o recurso composto

No nosso exemplo, criamos uma configuração que invoca vários recursos existentes para configurar máquinas virtuais. Em vez de especificar os valores a definir nos blocos de configuração, a configuração utiliza parâmetros que são utilizados nos blocos de configuração.

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

Nota

Atualmente, o DSC não suporta a colocação de recursos compostos ou configurações aninhadas num recurso composto.

Guardar a configuração como um recurso composto

Para utilizar a configuração parametrizada como um recurso DSC, guarde-a numa estrutura de diretório como a de qualquer outro recurso baseado em MOF e dê-lhe um nome com uma .schema.psm1 extensão. Neste exemplo, vamos atribuir o nome ao ficheiro xVirtualMachine.schema.psm1. Também tem de criar um manifesto com o nome xVirtualMachine.psd1 que contém a seguinte linha.

RootModule = 'xVirtualMachine.schema.psm1'

Nota

Isto para além MyDscResources.psd1de , o manifesto do módulo para todos os recursos na MyDscResources pasta.

Quando terminar, a estrutura da pasta deve ser a seguinte.

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

O recurso é agora detetável com o Get-DscResource cmdlet e as respetivas propriedades são detetáveis por esse cmdlet ou através da conclusão automática doEspaçoCtrl+ na Windows PowerShell ISE.

Utilizar o recurso composto

Em seguida, criamos uma configuração que chama o recurso composto. Esta configuração chama o recurso composto xVirtualMachine para criar uma máquina virtual e, em seguida, chama o recurso xComputer para mudar o nome.

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

Também pode utilizar este recurso para criar várias VMs ao transmitir uma matriz de nomes de VMs para o recurso 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"
        }
    }
}

Suportar PsDscRunAsCredential

Nota

O PsDscRunAsCredential é suportado no PowerShell 5.0 e posterior.

A propriedade PsDscRunAsCredential pode ser utilizada no bloco de recursos de configurações do DSC para especificar que o recurso deve ser executado num conjunto especificado de credenciais. Para obter mais informações, veja Executar o DSC com credenciais de utilizador.

Para aceder ao contexto do utilizador a partir de um recurso personalizado, pode utilizar a variável $PsDscContextautomática .

Por exemplo, o código seguinte escreveria o contexto de utilizador no qual o recurso está em execução no fluxo de saída verboso:

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

Consulte também

Conceitos