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.psm1
namnet . 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";
}