Složené prostředky: Použití konfigurace DSC jako prostředku
Platí pro: Windows PowerShell 4.0, Windows PowerShell 5.0
V reálných situacích může být konfigurace dlouhá a složitá, což volá mnoho různých prostředků a nastavuje obrovské množství vlastností. K vyřešení této složitosti můžete použít konfiguraci Windows PowerShell Desired State Configuration (DSC) jako prostředek pro jiné konfigurace. Tomu se říká složený prostředek. Složený prostředek je konfigurace DSC, která přijímá parametry. Parametry konfigurace fungují jako vlastnosti prostředku.
Konfigurace se uloží jako soubor s příponou .schema.psm1
. Místo schématu MOF a skriptu prostředku v typickém prostředku DSC. Další informace o prostředcích DSC najdete v tématu prostředky Windows PowerShell Desired State Configuration.
Vytvoření složeného prostředku
V našem příkladu vytvoříme konfiguraci, která vyvolá řadu existujících prostředků pro konfiguraci virtuálních počítačů. Místo zadání hodnot, které mají být nastaveny v blocích konfigurace, konfigurace přebírá parametry, které se pak používají v konfiguračních blocích.
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")
}
}
}
Poznámka
DSC v současné době nepodporuje umístění složených prostředků nebo vnořených konfigurací v rámci složeného prostředku.
Uložení konfigurace jako složeného prostředku
Pokud chcete parametrizovanou konfiguraci použít jako prostředek DSC, uložte ho do adresářové struktury jako jakýkoli jiný prostředek založený na MOF a pojmenujte ho .schema.psm1
pomocí rozšíření. V tomto příkladu pojmenujeme soubor xVirtualMachine.schema.psm1
. Musíte také vytvořit manifest s názvem xVirtualMachine.psd1
, který obsahuje následující řádek.
RootModule = 'xVirtualMachine.schema.psm1'
Poznámka
To je navíc k MyDscResources.psd1
manifestu modulu pro všechny prostředky ve MyDscResources
složce .
Po dokončení by struktura složek měla vypadat následovně.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
Prostředek je teď zjistitelný pomocí Get-DscResource
rutiny a jeho vlastnosti lze zjistit buď pomocí této rutiny, nebo pomocí automatického dokončování mezerníku Ctrl+ v Windows PowerShell ISE.
Použití složeného prostředku
Dále vytvoříme konfiguraci, která volá složený prostředek. Tato konfigurace volá složený prostředek xVirtualMachine k vytvoření virtuálního počítače a potom zavolá prostředek xComputer , který ho přejmenuje.
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"
}
}
}
Tento prostředek můžete také použít k vytvoření více virtuálních počítačů předáním pole názvů virtuálních počítačů do prostředku 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"
}
}
}
Podpora PsDscRunAsCredential
Poznámka
PsDscRunAsCredential se podporuje v PowerShellu 5.0 a novějších verzích.
Vlastnost PsDscRunAsCredential je možné použít v bloku prostředků konfigurace DSC k určení, že se prostředek má spustit pod zadanou sadou přihlašovacích údajů. Další informace najdete v tématu Spuštění DSC s přihlašovacími údaji uživatele.
Pro přístup k kontextu uživatele z vlastního prostředku můžete použít automatickou proměnnou $PsDscContext
.
Následující kód například zapíše kontext uživatele, ve kterém je prostředek spuštěný, do podrobného výstupního datového proudu:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}