Freigeben über


Zusammengesetzte Ressourcen: Verwenden einer DSC-Konfiguration als Ressource

Gilt für: Windows PowerShell 4.0, Windows PowerShell 5.0

In der Praxis können Konfigurationen lang und komplex werden, viele verschiedene Ressourcen aufrufen und eine große Anzahl von Eigenschaften festlegen. Um dieser Komplexität gerecht zu werden, können Sie eine Windows PowerShell-DSC-Konfiguration (Desired State Configuration) als Ressource für andere Konfigurationen verwenden. Dies wird als zusammengesetzte Ressource bezeichnet. Eine Verbundressource ist eine DSC-Konfiguration, die Parameter akzeptiert. Die Parameter der Konfiguration fungieren als Eigenschaften der Ressource. Die Konfiguration wird als Datei mit der .schema.psm1 Erweiterung gespeichert. Es ersetzt sowohl das MOF-Schema als auch das Ressourcenskript in einer typischen DSC-Ressource. Weitere Informationen zu DSC-Ressourcen finden Sie unter Windows PowerShell Desired State Configuration Resources.

Erstellen der zusammengesetzten Ressource

In unserem Beispiel erstellen wir eine Konfiguration, die eine Reihe vorhandener Ressourcen aufruft, um virtuelle Maschinen zu konfigurieren. Anstatt die Werte anzugeben, die in Konfigurationsblöcken gesetzt werden sollen, nimmt die Konfiguration Parameter auf, die dann in den Konfigurationsblöcken verwendet werden.

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

Hinweis

DSC unterstützt derzeit nicht das Platzieren von Verbundressourcen oder geschachtelten Konfigurationen innerhalb einer Verbundressource.

Speichern der Konfiguration als zusammengesetzte Ressource

Wenn Sie die parametrisierte Konfiguration als DSC-Ressource verwenden möchten, speichern Sie sie in einer Verzeichnisstruktur wie jede andere MOF-basierte Ressource, und benennen Sie sie mit einer .schema.psm1 Erweiterung. In diesem Beispiel nennen wir die Datei xVirtualMachine.schema.psm1. Außerdem müssen Sie ein Manifest mit dem Namen xVirtualMachine.psd1 erstellen, das die folgende Zeile enthält.

RootModule = 'xVirtualMachine.schema.psm1'

Hinweis

Dies gilt zusätzlich zu MyDscResources.psd1, dem Modulmanifest für alle Ressourcen unter dem MyDscResources Ordner.

Wenn Sie fertig sind, sollte die Ordnerstruktur wie folgt aussehen.

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

Die Ressource kann jetzt mit dem Get-DscResource Cmdlet ermittelt werden, und ihre Eigenschaften können entweder mit diesem Cmdlet oder mithilfe der automatischen Vervollständigungder STRG-Leertaste+ in der Windows PowerShell ISE ermittelt werden.

Verwenden der zusammengesetzten Ressource

Als Nächstes erstellen wir eine Konfiguration, die die zusammengesetzte Ressource aufruft. Diese Konfiguration ruft die zusammengesetzte Ressource xVirtualMachine auf, um einen virtuellen Computer zu erstellen, und ruft dann die Ressource xComputer auf, um sie umzubenennen.

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

Sie können diese Ressource auch verwenden, um mehrere VMs zu erstellen, indem Sie ein Array von VM-Namen an die xVirtualMachine-Ressource übergeben.

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

Unterstützen von PsDscRunAsCredential

Hinweis

PsDscRunAsCredential wird in PowerShell 5.0 und höher unterstützt.

Die PsDscRunAsCredential-Eigenschaft kann im Ressourcenblock DSC-Konfigurationen verwendet werden, um anzugeben, dass die Ressource unter einem angegebenen Satz von Anmeldeinformationen ausgeführt werden soll. Weitere Informationen finden Sie unter Ausführen von DSC mit Benutzeranmeldeinformationen.

Um aus einer benutzerdefinierten Ressource heraus auf den Benutzerkontext zuzugreifen, können Sie die automatische Variable $PsDscContextverwenden.

Der folgende Code würde z. B. den Benutzerkontext, unter dem die Ressource ausgeführt wird, in den ausführlichen Ausgabestream schreiben:

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

Siehe auch

Konzepte