Aracılığıyla paylaş


Bileşik kaynaklar: DSC yapılandırmasını kaynak olarak kullanma

Şunlar için geçerlidir: Windows PowerShell 4.0, Windows PowerShell 5.0

Gerçek dünyada yapılandırmalar uzun ve karmaşık hale gelebilir, birçok farklı kaynağı çağırabilir ve çok sayıda özellik ayarlayabilir. Bu karmaşıklığı gidermeye yardımcı olmak için, diğer yapılandırmalar için kaynak olarak Windows PowerShell Desired State Configuration (DSC) yapılandırmasını kullanabilirsiniz. Buna bileşik kaynak adı verilir. Bileşik kaynak, parametreleri alan bir DSC yapılandırmasıdır. Yapılandırmanın parametreleri, kaynağın özellikleri olarak davranır. Yapılandırma, uzantılı .schema.psm1 bir dosya olarak kaydedilir. Tipik bir DSC kaynağında hem MOF şemasının hem de kaynak betiğinin yerini alır. DSC kaynakları hakkında daha fazla bilgi için bkz. kaynakları Windows PowerShell Desired State Configuration.

Bileşik kaynak oluşturma

Örneğimizde, sanal makineleri yapılandırmak için bir dizi mevcut kaynağı çağıran bir yapılandırma oluşturuyoruz. Yapılandırma bloklarında ayarlanacak değerleri belirtmek yerine yapılandırma, yapılandırma bloklarında kullanılan parametreleri alır.

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

Not

DSC şu anda bileşik kaynakların veya iç içe yerleştirilmiş yapılandırmaların bileşik kaynağa yerleştirilmesini desteklememektedir.

Yapılandırmayı bileşik kaynak olarak kaydetme

Parametreli yapılandırmayı bir DSC kaynağı olarak kullanmak için, bunu diğer MOF tabanlı kaynaklar gibi bir dizin yapısına kaydedin ve uzantıyla .schema.psm1 adlandırın. Bu örnekte dosyayı xVirtualMachine.schema.psm1olarak adlandıracağız. Aşağıdaki satırı içeren adlı xVirtualMachine.psd1 bir bildirim de oluşturmanız gerekir.

RootModule = 'xVirtualMachine.schema.psm1'

Not

Bu, klasörün altındaki tüm kaynaklar için modül bildirimine ek olarak MyDscResources.psd1sağlanır MyDscResources .

İşiniz bittiğinde klasör yapısı aşağıdaki gibi olmalıdır.

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

Kaynak artık cmdlet kullanılarak Get-DscResource bulunabilir ve özellikleri bu cmdlet tarafından veya Windows PowerShell ISE'de Ctrl+Boşluk otomatik tamamlama kullanılarak bulunabilir.

Bileşik kaynağı kullanma

Ardından bileşik kaynağı çağıran bir yapılandırma oluşturacağız. Bu yapılandırma, bir sanal makine oluşturmak için xVirtualMachine bileşik kaynağını çağırır ve sonra yeniden adlandırmak için xComputer kaynağını çağırır.

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

Bu kaynağı, xVirtualMachine kaynağına bir DIZI VM adı geçirerek birden çok VM oluşturmak için de kullanabilirsiniz.

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

PsDscRunAsCredential desteği

Not

PsDscRunAsCredential , PowerShell 5.0 ve sonraki sürümlerde desteklenir.

PsDscRunAsCredential özelliği, kaynağın belirtilen kimlik bilgileri kümesi altında çalıştırılması gerektiğini belirtmek için DSC yapılandırmaları kaynak bloğunda kullanılabilir. Daha fazla bilgi için bkz . DSC'yi kullanıcı kimlik bilgileriyle çalıştırma.

Özel bir kaynağın içinden kullanıcı bağlamlarına erişmek için otomatik değişkenini $PsDscContextkullanabilirsiniz.

Örneğin, aşağıdaki kod kaynağın altında çalıştığı kullanıcı bağlamını ayrıntılı çıkış akışına yazar:

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

Ayrıca Bkz.

Kavramlar