Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: Windows PowerShell 4.0, Windows PowerShell 5.0
V reálných situacích mohou být konfigurace dlouhé a složité, volat mnoho různých prostředků a nastavovat obrovské množství vlastností. Pokud chcete tuto složitost vyřešit, můžete použít konfiguraci Windows PowerShell Desired State Configuration (DSC) jako prostředek pro další konfigurace. Tomu se říká složený prostředek. Složený prostředek je konfigurace DSC, která přebírá parametry. Parametry konfigurace fungují jako vlastnosti prostředku.
Konfigurace se uloží jako soubor s příponou .schema.psm1 . Nahrazuje schéma MOF i skript prostředků v typickém prostředku DSC. Další informace o prostředcích DSC najdete v tématu Prostředky konfigurace požadovaného stavu prostředí Windows PowerShell.
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čů. Namísto zadávání hodnot, které mají být nastaveny v konfiguračních blocích, konfigurace přebírá parametry, které jsou následně použity 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
Chcete-li použít parametrizovanou konfiguraci jako prostředek DSC, uložte ji do adresářové struktury, jako je tomu u jakéhokoli jiného prostředku založeného na MOF, a pojmenujte ji příponou .schema.psm1 . V tomto příkladu soubor pojmenujeme 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:
Jedná se o doplněk MyDscResources.psd1manifestu modulu pro všechny prostředky ve MyDscResources složce.
Až budete hotovi, struktura složek by měla vypadat následovně.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
Prostředek je nyní zjistitelný pomocí rutiny Get-DscResource a jeho vlastnosti jsou zjistitelné buď touto rutinou, nebo pomocí automatického dokončování Ctrl+Space v prostředí Windows PowerShell ISE.
Použití složeného prostředku
Dále vytvoříme konfiguraci, která volá složený zdroj. Tato konfigurace volá kompozitní prostředek xVirtualMachine k vytvoření virtuálního stroje a poté volá prostředek xComputer k jeho přejmenování.
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 je podporován v PowerShellu 5.0 a novějším.
Vlastnost PsDscRunAsCredential lze použít v bloku prostředků konfigurace DSC k určení, že prostředek má být spuštěn 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.
Chcete-li získat přístup ke kontextu uživatele z vlastního zdroje, můžete použít automatickou proměnnou $PsDscContext.
Například následující kód by zapsal 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";
}